1.名词解释:构造方法、抽象。
构造方法:构造方法是一个与类名相同的类方法。每当使用new关键字创建一个对象,为新建对象开辟了内存空间之后,java系统将自动调用构造方法初始化这个新建对象
关键:①与类名相同
②构造方法没有返回类型,可重载
③作用:对数据成员进行初始化
抽象(abstraction):是从被研究对象中舍弃个别的、非本质的或与研究主旨无关的次要特征,而抽取与研究有关的共性内容加以考察,形成对研究问题正确、简明扼要的认识。
2.对象位于内存何处?声明能引用对象的实质是什么?
所有对象都在堆上,而对象引用可能在栈上也可能在堆上。
内存空间分为堆和栈(堆在应用程序生命周期内一直存在,而栈在方法调用完之后就释放,类和对象被分配到堆中,而方法执行时用的局部变量和形式参数则放到栈空间当中。
对象的引用就是对象的声明,有点类似对象的名片,或者说遥控对象这个电视机的遥控器,他储存着对象的实际地址,因此可以指向对象。
3.对象和基本数据类型作为参数传递时,有什么不同?
1 public class BaiduTest01 {
2 private String str = "sam" ; //str是引用类型,但是String是final的
3 private int num = 2 ;//num是基本类型
4 private Float floatNum = Float.valueOf(3.2f) ;//floatNum是引用类型,但是Float是final的
5 private char[] ch = {'a','b','c'} ; //常见的引用类型
6 public void changeString(String str) {
7 str = "tom" ;
8 }
9 public void changeFloat(Float floatNum) {
10 floatNum = Float.valueOf(6.4f) ;
11 }
12 public void changeInt(int num) {
13 num = 20 ;
14 }
15 public void changeCharArray(char[] ch) {
16 ch[1] = 'd' ;
17 }
18
19 public static void main(String[] args) {
20 BaiduTest01 test = new BaiduTest01() ;
21 test.changeString(test.str) ;
22 test.changeInt(test.num) ;
23 test.changeFloat(test.floatNum) ;
24 test.changeCharArray(test.ch) ;
25 System.out.println(test.str) ; //输出结果不变
26 System.out.println(test.num) ;//输出结果不变
27 System.out.println(test.floatNum) ;//输出结果不变
28 System.out.println(test.ch) ;//输出结果改变
29 }
30 }
例子
也就是说传递基本数据类型就只是传数据,按值修改;
而对象作为参数传递引用,也就是地址;
需要注意的是当引用类型是final时是修改不了的。
4.在自定义对象中写finalize方法,看看什么情况下finalize被调用。
1 class Book{
2 private String bname;
3 public Book(String name){
4 bname=name;
5 }
6 protected void finalize(){
7 System.out.println("finalize被调用,释放对象Release Object");
8 }
9 }
10 public class SthAboutGcFinalize {
11 public static void main(String args[]){
12 Book novel=new Book("123");
13 novel=null;
14 System.gc();
15 }
16 }
最后结果会出现:finalize被调用,释放对象Release Object
可调用System.gc()方法或者Runtime.getRuntime().gc()提醒系统进行一次垃圾释放,但是System.gc()只是提醒,并不能保证一定释放,因为进行垃圾回收的系统县城级别很低,当系统很忙时,有可能忽略这项工作,只有不忙时才进行相应的释放垃圾的工作,此时垃圾对象的finalize方法才被调用。
5.对象在什么条件下成为垃圾?什么情况下释放垃圾对象,如何证明一个对象被释放了?
1.什么是垃圾对象?
对象没有任何引用
2.垃圾对象何时回收?
虚拟机在系统资源不够的情况下才会回收垃圾对象
3.垃圾对象回收时调用finalize方法
垃圾回收不能保证一定会发生
还是刚才那个例子变成这样
1 class Book{
2 private String bname;
3 public Book(String name){
4 bname=name;
5 }
6 protected void finalize(){
7 System.out.println("finalize被调用,释放对象Release Object");
8 }
9 }
10 public class SthAboutGcFinalize {
11 public static void main(String args[]){
12 Book novel=new Book("123");
13 novel=null;
14 System.gc();
15 if(novel==null)
16 System.out.println("novel对象被释放");
17 }
18 }
例子
加了一句
if(novel==null)
System.out.println("novel对象被释放");
}
最后结果:
novel对象被释放
finalize被调用,释放对象Release Object
6.final修饰符都有什么作用?
1.修饰类属性--->常量,不能被修改
2.修饰方法--->最终方法,不能被覆盖
3.修饰类--->终态类,类不能被继承
7.static修饰的属性和方法有什么特点?
静态对象为类所有,而不是为对象所有。
静态字段最先被初始化,static修饰的域变量被共享,他只有一个。(类似于班级的班费,为所有学生所共享,只需要一个学费,而不是在所有学生的属性中都加一个学费,这样可以节省空间,而且修改方便)
static修饰的属性的特点:它被保存在类的内存区(堆)中的公公存储单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问他时,存取到的都是相同的数值。访问方式:类名.域名
static修饰的方法的特点:称作静态方法,属于类方法,不属于类的任何对象。
1.static方法是类方法,但可以被所有对象所访问。调用这个方法时,可采用:"对象引用.方法名"或者"类名.方法名"
2.static方法内部的代码,只能访问类中的static属性或方法,不能访问类中的非static属性或方法
3.main方法是特殊的静态方法
8.Application程序执行时,为什么不能带后缀名?
java命令是执行一个类。
若写 java x.y是代表要运行package x中的class y里面的main(String[]),所以当你写java x.class时, 它会以为要找一个叫x的package里面的一个叫class的class
9.下面代码中,vector是java.util包中的一个类,关于此类哪个叙述是正确的
1)public void create(){
2) vector myvect;
3) myvect=new vector();
4)}
A第二行的声明不会为变量myvect分配内存空间
B第二行的声明分配一个到vector对象的引用的内存空间
C第二行语句创建一个vector类对象
D第三行语句创建一个vector类对象
E第三行语句为一个vector类对象分配内存空间
答案:ADE
解析:声明不分配内存空间的,创建对象时才分配对应的内存空间
第二行声明了一个对象引用,第三行创建了一个对象,为对象分配了内存,并且将对象引用与对象关联。