java基础-java对象初始化的问题

问题描述

java对象初始化的问题

java类中成员变量是自身对象的问题,可以知道如果这个成员变量是非static的,那么会出现stackOverflowError,即创建了一个A对象,A对象初始化时又会创建一个A对象,从而造成死循环,那么如果这个成员变量是static的,不会出现这个问题,但是运行结果我不是很懂,上代码:

public class Test {
public static void main(String[] args) {
Person p=new Person("a");
//Boy b=new Boy("b");

}

}
class Person{
private int id;
Person p=new Person("bb");
//static Boy b=new Boy("bb");
static {
System.out.println("静态代码块!");
}
{
System.out.println("非静态代码块!");
}
Person(String s){
System.out.println("构造器"+s);
}
}
运行结果为:
非静态代码块!
构造器bb
静态代码块!
非静态代码块!
构造器a
就是该static成员变量即Person对象初始化时没有执行static代码块,求解释啊,万分感谢!

时间: 2024-08-02 05:25:00

java基础-java对象初始化的问题的相关文章

java基础-Java基础一个问题,求帮忙解答

问题描述 Java基础一个问题,求帮忙解答 有一个java类 public final class Test{ private long position = -1; public void method(){ position++; } } 当系统中A访问Test method后,position值为多少,B再访问Test method后,position值为多少? 为什么,求帮忙解答? 解决方案 访问之后,position的值始终为0,这是一个final类,每次进去访问时,position的

java基础-java面向对象编程二

01.面向对象(static关键字) 用法:是一个修饰符,用于修饰成员(成员变量和成员函数). 当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用之外,还可以被类名直接调用.类名.静态成员. 对象的特有内容随着对象存储,共有内容可以定义为静态的,放在共享区. 类中的方法区,共享区,数据区都在同一个区. static的特点: (1)随着类的加载而加载,随着类的消失而消失.也就是说,静态会随着类的消失而消失,说明他的生命周期最长. (2)优先于对象存在:明确一点:静态先存在,对象后存在. (

java基础-Java基础 canvas中加载图片问题

问题描述 Java基础 canvas中加载图片问题 public class GameCanvas extends Canvas implements Runnable{ boolean PaintState=true; Image soccerImage; public GameCanvas(){ try { soccerImage=ImageIO.read(new File(""/image/soccer.jpg""));} catch (IOException

java基础-JAVA equals方法被调用时字符串和对象的顺序

问题描述 JAVA equals方法被调用时字符串和对象的顺序 如图所示 equals方法中对象在前还是字符串在前? 是标准还是建议? 解决方案 一般建议是字符串在前,这样能够避免当你的对象为[null] 的时候,报空指针异常. 解决方案二: 字符串在前,避免当你的对象为[null] 的时候,报空指针异常

java基础-java方法调用和对象比较问题

问题描述 java方法调用和对象比较问题 public int compare(Posen o1, Posen o2) { int num = o1.getName().compareTo(o2.getName());这句话是什么意思? if(num==0) { return new Integer(o1.getAge()).compareTo(o2.getAge()); return num; } 解决方案 compareTo是String的一个方法,按照长度文字排序等返回大于0小于0和等于0

java基础-java类中的代码运行顺序

问题描述 java类中的代码运行顺序 下面列子:public class A{ private List list=new ArrayList(); public static void main(string[] args){ A a=new A(); } }问 :1,该类什么时候被编译?什么时候被加载? 2,在运行该类的时候list 对象是在main函数执行过才有的么?还是说在加载的时候就已经被创建了? 3,如果其中有静态代码块,那么静态代码块在类加载的时候就被执行了么?也就是说在main函

java基础-java中的泛型的具体作用是什么?

问题描述 java中的泛型的具体作用是什么? 看了很多教程,用到泛型的地方很多,最不明白的就是泛型的存在是因为什么,怎么用,什么时候用,求大神

java基础-java初学,环境变量路径改了,但是无法执行javac在其他目录

问题描述 java初学,环境变量路径改了,但是无法执行javac在其他目录 解决方案 环境变量路径改了,但是无法执行"javac在其他目录",是什么意思? JAVA_HOME的设置:D:Program FilesJavajdk1.8.0_11(安装路径) path的设置:%JAVA_HOME%bin;%JAVA_HOME%jrebin 解决方案二: 可能是没有把java的bin目录添加到path路径下. 参考:http://blog.csdn.net/wojiushiwo945you/

java基础-Java的运算符 先后问题

问题描述 Java的运算符 先后问题 for (int i = 0m=0; i <10; i++) { m=m++; System.out.println(m); } 为什么输出的m一直等于0, 最主要是想知道 在这个代码中 m=m++;是怎么运行.一般来说 先把m赋值给m 然后 m在自增,这种情况下 输出的应该是123...... 但是实际上 输出的却一直是0 各位求解 解决方案 因为它是先把m赋值给m,然后m再加1,而每次循环时m都赋值为0,所以m一直等于0.你想输出123...可以试试改成