一些基础的问题

标识符

由字母数字下划线$符号组成,但是不能以数字开头

关键字

从来没有用到的关键字:goto, const
jdk1.4 assert jdk1.5 enum

接口和抽象类的区别

1.从构造器来看:抽象类允许有构造方法,而接口不允许有构造方法。两者均不能被实例化,但是抽象类可以被声明
2.从成员变量来看:抽象类允许有普通的成员变量,而接口不允许有普通的成员变量,必须被public static final 修饰 即常量
3.从方法来看:抽象类中可以有静态方法和普通方法,而接口中必须是抽象方法,默认是 public abstract (abstract 可以省略),抽象类的方法可以被public .protect.private修饰,接口中的方法必须被public修饰
4.从继承关系来看:一个类只能实现一个抽象类,一个类可以实现多个接口。
5.应用场景:抽象类大多用于重构,而接口用于解耦。

继承

子类继承父类的所有属性包括私有属性,只不过父类的私有属性被隐式继承,子类不能直接使用但是可以间接的调用。
子类默认继承父类的无参构造,在调用自己的构造时先调用父类的构造方法,此时写不写super()都可以。当父类没有无参构造必须使用super()调用父类的有参构造。

代码块执行顺序问题

静态代码块>mian方法>构造代码块>构造方法
普通代码块:在方法或者语句中定义的代码块
构造代码块:直接定义在类中没有static修饰的代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
静态代码块: static修饰的代码块。随着类的加载而被执行。并且只执行一次。

重载和重写(覆写)

重载:发生在同一个类中,是一个类中多态的表现。方法名相同,参数必须不同,返回类型可以不同。可以有不同的修饰符,可以抛出不同的异常。
重写(overload):发生在继承中,方法名,参数类型,返回值都必须相同。修饰符要大于等于被重写的方法。重写的方法不能抛出比被重写的方法更宽泛的异常或者新的异常。

final ,fianlly,finalize

final:被fianl修饰的类不能被继承,所以不能修饰抽象类。被fianl修饰的方法不能被重写。被final修饰的变量一旦初始化不能被更改即常量final修饰的引用数据类型引用不可变内容可以改变
finaly :在异常处理的时候提供一个fianly块来执行任何的清除操作。一定被执行的语句,通常用来释放资源。
finalize 方法名 Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

枚举:

enum 关键字定义枚举,代替了多例
使用enum关键字定义枚举默认继承Enum抽象类。Enum类的构造是protect修饰的。依然相当于封装

关于表达式数据类型提升的问题

1.在计算的时候byte,short,char型的值将会被提升为int类型
2.如果有一个操作数是long类型,那么结果是long类型
3.如果有一个操作数是float类型,那么结果是long类型
4.如果有一个操作数是double类型,那么结果是double类型
5.被final修饰的变量在编译时期就被确定,是常量

public class Test {
    static byte b1=1,b2=2,b3,b6;
    static final byte b4=4,b5=6;


    public static void main(String[] args) {
        b6=b4+b5;
        b3=(byte) (b1+b2);
        System.out.println(b3+b6); 
    }

}
//b4和b5被final修饰是常量,b6在编译期就已经为10,b1+b2运算的时候被提升为int ,所以要强制类型转换

关于Integer的自动拆装箱问题

public class Test {
    static Integer i1=59;
    static int i2=59;
    static Integer i3= Integer.valueOf(59);
    static Integer i4= new Integer(59);
    static Integer i5 = Integer.valueOf(128);
    static Integer i6 = Integer.valueOf(128);


    public static void main(String[] args) {
        System.out.println(i1==i2);
        System.out.println(i1==i3);
        System.out.println(i3==i4);
        System.out.println(i2==i4);
        System.out.println(i5==i6);

    }

}

/*输出依次为
true: i1 自动拆箱为int类型,基本数据类型比较值为true
true: 
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
i1和i3 的数值在-128~127之间,自动装箱之后指向同一个对象返回true
false:两个不同的对象,比较的是地址false
true:i5自动拆箱为int类型,基本数据类型比较值为true
false:i5,i6不在-128~127之间,返回不同的对象,false*/

运算符的优先级

算数运算符>移位运算符>关系运算符>位运算符(& | ^ ~)>逻辑运算符(&& ||)>
三目运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值