1.对象与对象引用的区别是什么? 请举例说明
friend a=new friend()
a被称为该对象的引用
即对象包含对象引用
2.对象作为参数传递的特点是什么?请举例说明
对象的参数传递是传递对象的地址
public class shiyan { int value; } public class RunIntClass { public static void modifyValue(shiyan s,int val) { s.value=val; } public static void main(String args[]) { shiyan a=new shiyan(); modifyValue(a,8); System.out.println(a.value); } }
3.对象初始化顺序是怎样的?请举例说明
加载类:先加载父类再加载子类
创建对象要先加载类。java中类的加载顺序是先加载父类再加载子类。而静态成员变量、静态成员函数、静态代码块等静态资源都是类的加载时就完成的。
所以先执行父类静态代码块再执行子类代码块
初始化:先初始化父类再初始化子类
先执行父类构造代码块、父类构造函数
再执行子类构造代码块、子类构造函数
public Parent() { super(); System.out.println("执行父类构造方法"); } static{ System.out.println("执行父类静态代码块"); } { System.out.println("执行父类的非静态代码块"); }
public Children() { super(); System.out.println("执行子类构造方法"); } static{ System.out.println("执行子类静态代码块"); } { System.out.println("执行子类的非静态代码块"); }
4.类的static字段与非static字段的区别是什么?什么场景应该使用static修饰符?请举例说明
static修饰符修饰的域变量不属于任何一个类的具体对象。它被保存在类的内存区的公共储存单元中,而不是保存在某个对象的内存区域内,因此,一个类的任何对象访问它的时候得到的数值都是相同的,方位的方式为“类名.域名”,也可以通过对象引用,来访问。
下面总结:
1.static方法是类的方法,但可以被所有的对象访问。调用这个方法是,可采用“对象引用.方法名”,也可以采用“类名.方法名”。
2.static方法内部的代码,只能访问类中的static属性或方法(因为他们属于对象);但非static方法(对象方法)可以访问static属性或方法。
3.main方法是特殊的静态方法。
import java .awt.; import java.applet.; class pc { static double ad =8; } public class RunPc extends Applet { public void paint(Graphic g) { Pc m =new Pc(); Pc m1=new Pc(); m.ad=0.1; g.drawString(“m1=”+m1.ad,20,50); g.drawString(“Pc=”+Pc.ad,20,70); g.drawString(“m=”+m.ad,20,90); } }
当对象中出现共享数据时使用static修饰
class StaticCodeBlock { static int value; static { value=3; System.out.println(“value=”+value); } public static void main(String []args){} }
5.Java中final修饰符都有什么作用?请举例说明
- 它可以修饰类,可以修饰方法,可以修饰变量
- final修饰的类是一个最终类,不可以被继承。
- final修饰的方法不可以被覆盖。
- final修饰的变量的是一个常量,只能被赋值一次。这个赋值指的是显示初始化赋值。
final double PI = 3.14;
6.Java中float[10] arr; 语句正确么?为什么?
不正确
因为系统无法识别该语句给arr数组分配内存空间。
该改为:
float[] arr=new float[10];
7.Java数组元素类型为基本类型和引用类型时,有什么不同?请举例说明
基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;
引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
如:
有一个类Person,有属性name,age,带有参的构造方法,
Person p = new Person("Tom",20);
在内存中的具体创建过程是:
1.首先在栈内存中位其p分配一块空间;
2.在堆内存中为Person对象分配一块空间,并为其三个属性设初值"",0;
3.根据类Person中对属性的定义,为该对象的两个属性进行赋值操作;
4.调用构造方法,为两个属性赋值为"Tom",20;(注意这个时候p与Person对象之间还没有建立联系);
5.将Person对象在堆内存中的地址,赋值给栈中的p;通过句柄p可以找到堆中对象的具体信息。