int value=100;
MyClass obj = new MyClass();
定义的两个变量不一样,前者是一个原始数据变量,而后者是引用一个对象的变量,称为“引用类型的变量”简称“对象变量”。
对象变量也可以使用“==”判断两变量值是否相等吗?
对象变量不适用“==”来判断两变量的只相等,因为当“==”施加于引用类型变量时,是比较这两个变量是否引用同一个变量,即“==”实际上相当于比较这两个引用类型变量中保存的对象地址相同。
以下代码为何无法通过编译?哪儿出错了?
原因:类中提供了一个自定义的构造方法,所以系统不再提供默认的构造方法,由于没有具替代的参数类型也无法调用定义的构造函数,所以无法通过编译。
输出结果:100 300
Java字段初始化的规律:类的初始化块不接受任何的参数,而且只要创建一个类对象他们就会被执行。执行类成员定义时指定的默认值或类的初始化块,在执行过程中是按照其生命历程的顺序执行的,即先执行哪一个就要看他的先后顺序。
静态初始化块的初始化顺序:
- 首先调用类中的静态初始化字段
- 调用类中的普通的无参数的构造函数
- 调用类中带有参数的构造函数
- 执行其自身的执行函数
静态初始化块只执行一次,创建子类型的对象时,也会导致父类型的静态初始化块的执行。
注意:在调用过程中都是先调用父类中的构造函数再调用子类的。
如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
答:在这个静态方法中创建类对象,通过对象来调用类中的实例成员。
package text; public class Employee { String name; long salary; short employee_id; static int total_employees; static void clear(){ total_employees=0; Employee em = new Employee(); em.salary = 500; em.name = "wjakfld"; em.employee_id = 12; } public static void main(String[] args) { } }
两对整数明明完全一样,为何一个输出true,一个输出false?
Intteger是一个类,是int的扩展,定义了很多的转换方法,当Java在编译Integer a = 100时被翻译成-> Integer a = Integer.valueOf(100);比较时仍然是对象的比较,而jdk为了提高效率初始化了-128~127之间的整数对象,所以在赋值的这个范围内还是同一个对象是相等的。
使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象”
private static int count;
public TongJi() {
// TODO 自动生成的构造函数存根
count++;
}
public static int getCount()
{
return count;
}
// TODO 自动生成的方法存根
TongJi t1 = new TongJi();
TongJi t2 = new TongJi();
TongJi t3 = new TongJi();
System.out.println("你创建了" + getCount() + "个对象");
}