Java易错题

易错题整合

知识盲区:statement语句:链接1
关于代码知识和Java了解(选择填空):

  1. 计算机语言可划分为:机器语言、汇编语言和高级语言。
  2. 计算机硬件能直接识别并执行的语言是机器语言。
  3. 机器语言能被计算机直接识别和执行。
  4. 伪代码既含有自然语言,又含有程序代码。
  5. java平台中,主要用于开发和部署在桌面,服务器的java应用程序的是Java SE
  6. java程序有java应用程序(Application)和java小程序(Applet)两种形式。
  7. java使用的字符编码是Unicode
  8. java注释有三种形式:单行注释、多行注释和文档注释。
  9. Java提供了三个无条件转换语句,分别为:return、break和continue。

1.关于数据类型和运算符

1.1 数据类型
  1. 5.0/2+10的结果是double,不是float的原因是:Java中,5.0f才表示浮点型,5.0d表示double型,而double允许省略d,即5.0默认是double型数据。注:Java语言中的浮点类型数据默认为double型。
  2. (int)5.8+1.0的结果为double型数据
  3. ‘苹’+‘果’的结果为int型数据
  4. (short)10+'a’的结果为int型数据:char的本质还是整数,因此是整型
  5. Java语言中数据类型有两大类:基本数据类型和引用数据类型。
  6. 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 运算符
  1. 设 a=1,b=2,c=3,计算表达式 a+=c++/–b运行之后,a的值是 4。其中c++,后增,先赋值再自增,为3,–b,先减再赋值,即a+=3/1;
  2. 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.关于接口

  • 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
  • 判断:
  1. 如果一个抽象类实现某个接口,那么它必须重写接口中的全部方法×
  2. 如果一个非抽象类实现某个接口,那么它可以只重写接口中的部分方法×
  3. (另一种问法)如果实现接口的是抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。×
  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.关于继承和多态

  1. 子类继承的方法只能操作子类继承和隐藏的成员变量。
  2. 子类重写的方法也能直接操作被子类隐藏的成员变量。
  3. 但子类新增的方法不能直接操作被子类隐藏的成员变量。
  4. 被继承的类一般称为父类或超类。
  5. 方法的多态性主要是指方法重载和方法覆盖。

7.关于面向对象

  1. 特征:封装、继承、多态

8.关于类(包括内部类)

  1. 类名的命名规范:类名不能使用数字开头,也不能使用除了_和$之外的任何符号,中间不能添加空格,不能使用java关键字。
    默认规范:类名的每个单词的首字母必须大写(帕斯卡命名法),类名必须使用有意义的名字。
    默认如此,但首字母小写和无意义的类命名也是正确的。
    如 $class12A , $123
    ,正确但没有意义。
  2. 抽象方法:声明抽象方法不能有大括号
  3. 类与对象的关系:类是对象的抽象
  4. 类中的数据称为成员变量,对数据的操作称为成员方法
  5. 内部类是定义在一个类内部的类,内部类所在的类一般称为外部类。

9.关于异常和错误

  1. 若一种方法可能产生异常,而该方法不能处理,可用throws子句声明该方法的可能抛出异常。注:throw直接抛出异常,throws可能抛出异常。
  2. 程序的三种错误:语法错误,运行错误,逻辑错误
  3. 程序能通过编译并运行,但结果与期望值不符的错误是逻辑错误。即人为导致的错误。
  4. java语言中所有例外情况的类都会继承的类是Exception
  5. try finally语句中由于没有catch,若try异常,则finally语句不执行,正常则执行。
  6. 捕获异常的语句是try-catch-finally
  7. Java语句要求捕获到的异常必须进行处理

10.关于图形化界面

  1. Swing图形用户界面主要由什么组成?A 组件 B 容器 C 布局管理器 D 事件 选A
  2. JFrame的默认布局管理器是FlowLayout

11. 关于访问权限

  1. Java种为类成员设置了几种访问权限?4种
  2. 此处留下疑问:类有哪几种访问权限?所有的都是四种吗?

12. 关于输入输出流

  1. java标准输入输出流分别是:in和out
  2. 按数据传输的方向将流分为输入流输出流
  3. 按流的基本数据类型将流分为字节流字符流
  4. 字符流的父类是:Reader和Writer。
  5. 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(数字显示为两行,为方便暂时写在一起
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值