- 对于 int a[]=new int[3];下列哪个叙述是错误的?( )
A.a.length的值是3
B.a[1]的值是1
C.a[0]的值是0
D.a.[a.length-1]的值等于a[2]的值
基本数据类型 && 引用数据类型
数据类型的初始值 测试结果 character打印出一个小方框 是因为他的值是’u0000’,代表在Unicode里的值是null ,是不可打印字符 。
StringString不是基本的数据类型,是final修饰的java类,是引用类型
而引用数据类型的初始值是null
以下是各数据类型的默认值
都是“0”所对应的值
t2- 下列哪个叙述是错误的?( )
A. 如果源文件有package语句,该语句必须是源文件的第一条语句。
B.一个Java源文件必须要有package语句。
C.一个源文件默认有“import java.lang.*”语句。
D.一个Java源文件可以有多条import语句。
package import class的顺序
package > import > class
啊错错错
C是的
java.lang包是java语言的核心,它提供了java中的基础类。
包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。
见A
以及平时的代码
- 对于下列Tom类,哪个叙述是正确的?( )
A.程序输出结果为:100
B. 有2个构造方法
C.有编译错误
D。程序运行时输出:hello100
public class Test{
public static void main(String args[ ]){
Tom cat1=new Tom();
Tom cat2=new Tom(100);
}
}
class Tom{
void Tom( ){
System.out.print(“hello”);
}
Tom(int n){
System.out.print(n);
}
}
两个构造方法?
无参的和含参的?
void Tom… 假的构造方法,是方法,但不是构造方法
方法名可以与类名相同
new Tom(100)需要使用这个构造方法
但是并没有这个构造器
只有这个普通方法
找不到这个构造方法,就编译错误了
public 类名(参数){构造初始化操作}
是没有返回类型的,并不是返回类型是void
- 哪个叙述是正确的?( )
A.在子类的构造方法中显示地写出super时,super关键字形成的语句必须是子类构造方法的第1条语句。
B.子类和父类必须在一个包中。
C.可以同时用final和abstract修饰同一个方法。
D.abstract类中,必须要有abstract方法。
对
B不一定
例如:protected访问修饰符的作用
解释1:
原因:初始化当前对象时,先保证父类对象先初始化 。
如果不指定构造器之间的调用关系 ,编译器会自动加上 super()且放在第一行 ;
所以,如果指定了构造函数间的调用,那么this()必须在第一行,以保证在执行任何动作前,对象已经完成了初始化。
解释2
构造方法,作用就是在JVM堆中构建出一个指定类型的对象。如果调用了两个这种形式的方法,就代表着构建出了两个对象。
为了避免对对象本身进行操作时,对象本身还未构建成功(也就找不到对应对象),所以对this()或super()的调用只能在构造方法中的第一行实现,防止异常。
总结:
避免多次创建对象,同一个方法内只能调用一次this()或super()。
为了避免操作对象时对象还未构建成功,需要this()和super()的调用在第一行实现以防止异常。
抽象方法必须要抽象类
抽象类不一定有抽象方法
充分不必要?也不对
还有接口的存在
- 下列代码的输出结果 ( )
A 29: 98 B 10: 10 C 19: 88 D 29: 88
class Animal{
int m=9;
public int get(int n){ return n+m;}
public int see(int n){ return n+m;}
}
class Dog extends Animal {
int m=18;
public int get(int n){
return n+m;
}
}
public class E{
public static void main(String args[ ]){
Animal animal =null
Dog dog=new Dog();
animal =dog;
animal.m=19;
dog.m=88;
int result1=animal.see(10);
int result2=animal.get(10);
System.out.printf(“%d:%d”,result1,result2);
}
}
向上转型知识介绍
父类引用指向子类对象
Animal animal=new Dog();
在调用方法时,会遗失除去与父类共有的方法。
也就是说,只能调用父类里存在的方法名。
若不是,则报错
若是,转到2
若是,则调用子类的方法
若不是,则调用父类的方法
方法可以被重写
但是变量不会被覆盖
并且在向上转型后,若调用子类的特有变量则报错。
Animal animal =null;
//定义一个父类引用指向null
Dog dog=new Dog();
//定义一个子类引用指向子类对象
animal =dog;
//使父类引用指向dog指向的子类对象,两个引用指向同一个对象
animal.m=19;
//通过animal引用,改变的是父类的m值,父类m=19
dog.m=88;
//通过dog引用,改变的是子类的m值,子类m=88
int result1=animal.see(10);
//see仅存在父类方法中,调用父类的方法
//return 10+19
int result2=animal.get(10);
//get是父类子类共有的方法,调用子类的方法
//return 10+88
System.out.printf("%d:%d",result1,result2);



