您的位置:首页 > 职场人生

黑马程序员-java面向对象的一些问题

2013-11-10 16:24 423 查看
-------
android培训、java培训、期待与您交流! ----------

初学java的面向对象,遇到些许问题,为了搞清楚一些引用问题,首先学会画内存分配图。

在java程序编译运行的过程中,内存分为三块区域:栈内存,对内存,共享区。栈内存中存放的是程序按照顺序执行时,加载的类名,全局变量,方法名,变量指向堆内存中的实体对象。堆内存中存放的是实体。共享区内存放的是类加载时的静态变量、静态方法、成员方法体。

static:静态成员变量、方法。这些变量、方法是随着类被加载时,在共享区被创建,所处区域和对象的不一样。这些东西被创建先于对象,被此类的所有对象所共享。被调用时,只需要用 类名.成员名 的格式即可,同时,也可以通过创建类的对象,然后通过 对象名.成员名 的格式也行。

public class A{
public void static main(String [] args){
B.SS();
}
}

class B{
public static void SS(){
System.out.println("我是SS");
}
}

此段代码运行结果为 "我是SS"。在这里,我们没有实例化B类,但是因为SS方法为static类型的,不需要创建实例也可以直接调用。其运行结果同以下对象调用的方式:

public class A{
public void static main(String [] args){
B b=new B();
b.SS();
}
}

class B{
public static void SS(){
System.out.println("我是SS");
}
}


构造代码块:在类中光秃秃的一段代码{代码}。只要这个类被实例化,那么就会先执行构造代码块,再执行构造函数。

静态代码块:在类中 static{代码} 。当类被加载,静态代码块就被执行。

public class A{
public void static main(String [] args){
B b=new B();
}
}

class B{
public void B(){
System.out.print("AAA");
}
static{
System.out.print("BBB");
}
{
System.out.print("CCC");
}
}

上面这段代码执行结果是 CCCBBBAAA 。由此我们可以得到结论,在同时有静态代码块,构造代码块,构造函数的类被实例化时,内存中运行的顺序为 加载类->运行静态代码块->构造代码块->构造函数。

 ------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: