易错题整合
知识盲区:statement语句:链接1,
关于代码知识和Java了解(选择填空):
- 计算机语言可划分为:机器语言、汇编语言和高级语言。
- 计算机硬件能直接识别并执行的语言是机器语言。
- 机器语言能被计算机直接识别和执行。
- 伪代码既含有自然语言,又含有程序代码。
- java平台中,主要用于开发和部署在桌面,服务器的java应用程序的是Java SE
- java程序有java应用程序(Application)和java小程序(Applet)两种形式。
- java使用的字符编码是Unicode
- java注释有三种形式:单行注释、多行注释和文档注释。
- Java提供了三个无条件转换语句,分别为:return、break和continue。
1.关于数据类型和运算符
1.1 数据类型
- 5.0/2+10的结果是double,不是float的原因是:Java中,5.0f才表示浮点型,5.0d表示double型,而double允许省略d,即5.0默认是double型数据。注:Java语言中的浮点类型数据默认为double型。
- (int)5.8+1.0的结果为double型数据
- ‘苹’+‘果’的结果为int型数据
- (short)10+'a’的结果为int型数据:char的本质还是整数,因此是整型
- Java语言中数据类型有两大类:基本数据类型和引用数据类型。
- boolean类型的值不能被赋值为True,即不能大写
int x = 1;
char m = 'a'+x;会报错,从int转换到char会发生精度损失。
short t = 1 +'a';//输出98
byte n = 1 +'a';//输出98
char c = 1 +'a';//输出b
1.2 运算符
- 设 a=1,b=2,c=3,计算表达式 a+=c++/–b运行之后,a的值是 4。其中c++,后增,先赋值再自增,为3,–b,先减再赋值,即a+=3/1;
- 4%5=4;
2.关于数组
- 对于:int a[] = new int[3];
有以下理解 1.a.length=3;2.a[0] = a[1] = a[2]=0; - int d = new int[];不能通过编译,必须定义数组容量。
3.关于构造函数
- 构造函数可以重载√
- 构造方法的访问权限必须和类的访问权限一样× 解释:构造器的访问权限和方法的访问权限一样,但和类的访问权限不一样。方法可以有公开、保护和私有,但类没有protected。
- 不能用final和static修饰构造方法
4.关于接口
- 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
- 判断:
- 如果一个抽象类实现某个接口,那么它必须重写接口中的全部方法×
- 如果一个非抽象类实现某个接口,那么它可以只重写接口中的部分方法×
- (另一种问法)如果实现接口的是抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。×
- 接口中只能有常量和成员方法,(接口是由常量和特殊方法组成的特殊类)
5.关于String类
- String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。
- String类是final类,不可以有子类(final不能有子类√
- String类在java.lang包下,所以不需要导入。
- 字符串具有共享性。
- String 中 == 比较引用地址是否相同,equals() 比较字符串的内容是否相同。
String a1 = "akb";
String a2 = "akb";
char[] array = new char[]{'a','k','b'};
String a3 = new String(array);
System.out.print(a1 == a2);//输出为true
System.out.print(a2 == a3);//输出为false
System.out.print(a1 == a3);//输出为false
6.关于继承和多态
- 子类继承的方法只能操作子类继承和隐藏的成员变量。
- 子类重写的方法也能直接操作被子类隐藏的成员变量。
- 但子类新增的方法不能直接操作被子类隐藏的成员变量。
- 被继承的类一般称为父类或超类。
- 方法的多态性主要是指方法重载和方法覆盖。
7.关于面向对象
- 特征:封装、继承、多态
8.关于类(包括内部类)
- 类名的命名规范:类名不能使用数字开头,也不能使用除了_和$之外的任何符号,中间不能添加空格,不能使用java关键字。
默认规范:类名的每个单词的首字母必须大写(帕斯卡命名法),类名必须使用有意义的名字。
默认如此,但首字母小写和无意义的类命名也是正确的。
如 $class12A , $123,正确但没有意义。 - 抽象方法:声明抽象方法不能有大括号
- 类与对象的关系:类是对象的抽象。
- 类中的数据称为成员变量,对数据的操作称为成员方法。
- 内部类是定义在一个类内部的类,内部类所在的类一般称为外部类。
9.关于异常和错误
- 若一种方法可能产生异常,而该方法不能处理,可用throws子句声明该方法的可能抛出异常。注:throw直接抛出异常,throws可能抛出异常。
- 程序的三种错误:语法错误,运行错误,逻辑错误
- 程序能通过编译并运行,但结果与期望值不符的错误是逻辑错误。即人为导致的错误。
- java语言中所有例外情况的类都会继承的类是Exception。
- try finally语句中由于没有catch,若try异常,则finally语句不执行,正常则执行。
- 捕获异常的语句是try-catch-finally
- Java语句要求捕获到的异常必须进行处理。
10.关于图形化界面
- Swing图形用户界面主要由什么组成?A 组件 B 容器 C 布局管理器 D 事件 选A
- JFrame的默认布局管理器是FlowLayout
11. 关于访问权限
- Java种为类成员设置了几种访问权限?4种
- 此处留下疑问:类有哪几种访问权限?所有的都是四种吗?
12. 关于输入输出流
- java标准输入输出流分别是:in和out
- 按数据传输的方向将流分为输入流和输出流。
- 按流的基本数据类型将流分为字节流和字符流。
- 字符流的父类是:Reader和Writer。
- Java中I/O流所在的包是:java.io.*。
13. 关于分支语句
- for…each语句
语法格式:
for(部分类型 变量名:整体){
循环体;
}
例如:
int [] months = {1,2,3,4};
for(int mouths : months){
System.out.println(month);
}
for…each语句经JDK编译后为普通的for循环。 - switch表达式语句中,表达式的类型不能为long,同样,double,float等大于int的都不可以,但可以为byte,char,int
14. 关于读程序问题
public class Test1{
public static void main(String[] args) {
int[] a = new int[5];
for(int i:a){
System.out.print(i+"$");
}
}
}
//运行结果是:0$0$0$0$0$
public class T1 {
public static void main(String[] args) {
A a= new A();
System.out.println( a.fun());
}
}
class Super{
int a=24;
int b=6;
}
class A extends Super{
int fun (){
return a&b;
}
}
//运行结果:0
//??为啥
public class App {
public static void main(String[] args) {
B b = new B();
System.out.println(b.getM());//b.m初始化为0,返回100
b.m = 20;
System.out.println(b.getM());//b.m赋值为20,返回120
A a = b;//子类对象赋值给父类对象
a.m = -100;//父类对象中的m被赋值为-100
System.out.println(a.getM());//指向子类对象的get函数,m=20,返回120
System.out.println(b.seeM());//继承父类对象的函数,m=-100,返回-100
System.out.println(a.seeM());//返回自身函数,得-100
}
}
class A{
int m;
int getM(){
return m;
}
int seeM(){
return m;
}
}
class B extends A{
int m;
int getM(){
return (m+100);
}
}
//运行结果:120 120 -100 -100(每个数单列为一行,这次暂时写在一起
涉及知识:方法和变量在继承中的覆盖和隐藏。
对于实例变量和实例方法,变量被隐藏,方法被覆盖。此处m被隐藏,getM函数被覆盖,seeM函数被继承。
重要:参考学习链接:Java中方法和覆盖在继承中的覆盖和隐藏
4.纠错
package T1;
public class JT3 {
class A{
int x,y;
A(int x,int y){
this.x=x;
this.y=y;
}
}
public class E extends A{
E() {}
}
public static void main(String[] args) {
E e=new E();
System.out.println(e.x);
}
}
//下面是报错内容
/*java: 无法将类 T1.JT3.A中的构造器 A应用到给定类型;
需要: int,int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同*/
public class T1 {
public static void main(String[] args) {
A a= new A();
System.out.println( a.fun());
int m=3;
int n=4;
System.out.println( m&n);
}
}
class Super{
int a=24;
int b=6;
}
class A extends Super{
int fun (){
return a&b;
}
}
//运行结果:0 0(数字显示为两行,为方便暂时写在一起