java翻身之路

2021-06-15 java面经更新

2021-06-16  本文已影响0人  小白中的小白丶
  1. super和this的异同

    • super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)

    • this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)

    • super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参) this:它代表当前对象名(在程序中易产生二义性之处,应使用 this 来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用 this 来指明成员变量名)

    • 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

    • super() 和 this() 类似,区别是,super() 从子类中调用父类的构造方法,this() 在同一类内调用其它方法。

    • super() 和 this() 均需放在构造方法内第一行。

    • 尽管可以用this调用一个构造器,但却不能调用两个。

    • this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

    • this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。

    • 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。

  2. 访问修饰符public,private,protected,以及不写时的区别?

    修饰符 本类 同包 子类 其他包
    public
    protected ×
    default × ×
    private × × ×

    一般来说在编写代码的时候,属性基本都设置为private,是为了数据的安全性考虑。

    1.public,protected,default,private封装等级逐渐增加 2.四者对于本类当然是可以访问的了 3.public则是所有类都可以访问 4.protected则是对同包和子类都是公开的 5.default则是默认时的修饰符,对同包公开,但是对于子类不行 6.private则除了本类,其他都是隐藏的!

  3. short i = 1;i += 1; // 无任何问题i = i + 1; // 报错,编译不通过
    首先,因为short类型是16位的,而int类型是32位的,在进行(s1+i) 运算时,自动将s1提升到32位,然后与i相加,得到的结果是32位的,而此时s1=s1+i; 必然报错,因为如果赋值成功,只是把低16位赋给了s1,但是编译程序却不能判定你的意图是什么. 执行强转:s1=(short)(s1+i); 就没问题了.s1+=i;能编译通过并得到正确结果,而 s1=s1+i; 却报错,是因为s1+=i的方式java会对i进行窄化转换,由编译程序自动执行.

  4. 静态代码块和静态函数的区别
    java 静态代码块:
    一般情况下,如果有些代码必须在项目启动前就执行的时候,需要使用静态代码块,这种代码是主动执行的,它只执行一次,并且在同属于一个类的main函数之前执行。主要用于类的初始化。
    1.静态代码块会在类被加载时自动执行。 2.静态代码块只能定义在类里面,不能定义在方法里面。 3.静态代码块里的变量都是局部变量,只在块内有效。 4.一个类中可以定义多个静态代码块,按顺序执行。 5.静态代码块只能访问类的静态成员,而不允许访问实例成员。
    静态函数:
    需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的。
    1.静态方法可以直接使用,而实例方法必须在类实例化之后通过对象来调用。 2.在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。 3.实例方法只能使用这种方式对象名.方法名。 5.静态方法只允许访问静态成员。而实例方法中可以访问静态成员和实例成员。 6.静态方法中不能使用this,super(因为this,super是与实例相关的)。

上一篇下一篇

猜你喜欢

热点阅读