• Java错题集


    1、

    使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
    使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
    2、
    java中将ISO8859-1字符串转成GB2312编码,语句为 ?  ---:new String("ISO8859-1".getBytes("ISO8859-1"),"GB2312");
    new String("这是要转换的字符串".getBytes("ISO-8859-1"), "GB2312");
    getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
    String(byte[] bytes, Charset charset):通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
    3、
    方法重写应遵循“两同两小一大”原则:
    两同:方法名、形参列表相同;
    两小:返回值类型、抛出异常更小或相等,这里的“小”指的是继承关系的子父类,不是像高赞所谓的float和int的大小之分;
    一大:访问修饰符。
    重写体现在父类和子类之间,重载时体现在一个类中。
    4、
    is-a,理解为是一个,代表继承关系。 如果A is-a B,那么B就是A的父类。
    like-a,理解为像一个,代表组合关系。 如果A like a B,那么B就是A的接口。 
    has-a,理解为有一个,代表从属关系。 如果A has a B,那么B就是A的组成部分。
    5、
      接口可以继承接口,而且可以继承多个接口,但是不能实现接口,因为接口中的方法全部是抽象的,无法实现;
    另外,如果是Java 7以及以前的版本,那么接口中可以包含的内容有:1. 常量;2. 抽象方法
    如果是Java 8,还可以额外包含有:3. 默认方法;4. 静态方法
    如果是Java 9,还可以额外包含有:5. 私有方法
      普通类可以实现接口,并且可以实现多个接口,但是只能继承一个类,这个类可以是抽象类也可以是普通类,如果继承抽象类,必须实现抽象类中的所有抽象方法,否则这个普通类必须设置为抽象类;
    6、
      子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限就是public,所以子类重写后只能是public。
    7、
      Statement对象用于执行不带参数的简单SQL语句。 
      Prepared Statement 对象用于执行预编译SQL语句。 
      Callable Statement对象用于执行对存储过程的调用。
    8、
      在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,也支持了String类型
    String byte short int char Enum 类型
    9、
      基本数据类型之间除了boolean,其他数据类型之间可以任意的相互转换(强制转化或默认转换)。
      java中定义数组有两种方式,一种是int[ ] number,一种是int  number[ ]。
    10、
    Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
    throw用于抛出异常。
    throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
    try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
    cacth用于捕获从try中抛出的异常并作出处理。
    finally语句块是不管有没有出现异常都要执行的内容。
    11、
      引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的。
      扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
      系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。
    12、
    子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
    而父类没有无参的构造函数,所以子类需要在自己的构造函数中显式的调用父类的构造函数。
    class Employee extends Person {
        public Employee(String nm) {
            super(nm);
            // TODO Auto-generated constructor stub
        }
    13、
    在类方法中调用本类的类方法可直接调用。
    类方法是属于整个类的,而实例方法是属于类的某个对象的。
    由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制: 
    (1) 类方法中不能引用对象变量;
    (2) 类方法中不能调用类的对象方法;
    (3) 在类方法中不能使用super、this关键字。
    (4)类方法不能被覆盖。 
    如果违反这些限制,就会导致程序编译错误。
    与类方法相比,对象方法几乎没有什么限制。
    14、
    Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
    (1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
    (2) 箭头(→)。必须通过英文中画线和大于符号组成。
    (3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。
    15、

    AOP  OOP的区别:

    1. 面向方面编程 AOP 偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。
    2. 面向对象编程 (oop) 则是对业务分析中抽取的实体进行方法和属性的封装。
    也可以说 AOP 是面向业务中的动词领域, OOP 面向名词领域。
    AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。
    16、
    定义在方法外部的内部类:
      1.内部类中不能定义静态成员
      2.内部类可以直接访问外部类中的成员变量,
      3.内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中

           3.1.在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象

           3.2.方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或abstract修饰符。这种内部类对其他类是不可见的,其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问

      4.在方法外部定义的内部类前面可以加上static关键字,从而成为Static Nested Class

    17、

    关于synchronized和volatile的比较:

    • 关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块。
    • 多线程访问volatile不会发生阻塞,而synchronized会出现阻塞
    • volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步
    • 关键字volatile解决的下变量在多线程之间的可见性;而synchronized解决的是多线程之间资源同步问题

    18、

    1.finally{}代码块比return先执行。
    2. 记住一点,不管有不有异常抛出, finally都会在return返回前执行。
     
  • 相关阅读:
    知识体系总结
    计算机基础总结
    Redis总结
    Mysql总结
    JAVA基础总结
    有锁编程
    CAS
    读写自旋锁
    org.apache.log4j.Logger详解
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/i-chase/p/12813303.html
Copyright © 2020-2023  润新知