一、
早期我们经常这样定义变量
int value=100;
前面的示例中这样定义变量
MyClass obj = new MyClass();
这两种方式定义的变量是一样的吗?
回答:
前者是原始数据类型,定义一个原始类型的变量时,会马上给其分配内存。
后者是引用类型变量,“引用”一个对象的变量称为“引用类型”的变量,对象变量的初始化中,该变量若不引用一个真实的对象,则必须声明为null。而且引用对象后的对象变量,且如果不再使用此变量,将会回收类定义的对象所占用的内存。
二、
回答:一般不可以。类似于字符串的比较大小,使用equals()进行比较,用法与其相同。当“==”施加于“原始数据类型”变量时,是比较变量所保存的数据是否相等。当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。引用代表地址,所以当施加于引用类型变量时,实际上是比较两个引用类型变量中保存的对象地址是否一样。但是当对象进行赋值是可以判等的。
三、
回答:这个方法没有返回值类型。
四、
回答:
首先,当静态初始化块和非静态的初始化块都存在时,各个类先执行静态初始化块。
创建子类型对象时,也会追寻到父类,使父类也执行静态初始化块。且首先执行父类的静态初始化块内容,接着执行子类的静态初始化块方法,直到所有子类的静态初始化块内容执行完成。再回到父类,查看非静态的初始化块和构造方法,如果有继续执行。父类的非静态初始化块和构造方法执行完毕在执行子类的。总之,每个类的静态初始化块先执行,执行完毕在执行各个类的非静态初始化块。
五、
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
请编写代码验证你的想法。
回答:
六、
回答:自动装箱和拆箱在Java中很常见,比如我们有一个方法,接受一个对象类型的参数,如果我们传递一个原始类型值,那么Java会自动讲这个原始类型值转换成与之对应的对象。
七、
使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
源代码:import java.util.*;
public class lianxi {
public static void main(String[] args)
{
System.out.println("输入要创建对象的个数");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
demo[]expe=new demo[1000];
for(int i=0;i<n;i++)
{
expe[i]=new demo();
}
System.out.println("一共创建了"+demo.num+"个对象");
reader.close();
}
}
class demo
{
static int num;
static
{
num=0;
System.out.println("调用了静态初始化块!");
}
public demo()
{
num++;
}
}
截图: