面试知识点【java基础篇】

1、一个程序有且仅有一个main方法启动,main方法是作为java程序启动的唯一入口。

  public static void main(String[] args) {
        Student student = new Student(11,"111");
        System.out.println(student);
    }
权限修饰符:
    
    public:修饰一个类是公开的 public修饰的类一定和文件名一致,一个类中有且仅有一个 public类
    protect 
    private:修饰类 私有类
    default:默认不写
​
修饰类修饰方法修饰域
public公开类都可以访问都可以访问
private私有类该方法只能在本类中被访问不能被其他类访问该方法只能在本类中被访问不能被其他类访问
protect子类可以继承可以访问 同包下的类也可以访问子类可以继承可以访问 同包下的类也可以访问
default只有同包的可以访问 当前类可以访问只有同包的可以访问

作用域 当前类 同包 子类 其他

public √ √ √ √

protected √ √ √ ×

default √ √ × ×

private √ × × ×

类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。

2、static关键字

1、修饰类 静态类:静态内部类

2、修饰静态域:类的所有对象共享这个域

3、修饰方法 静态方法:不用创建对象直接 通过方法名加传参就可以调用 只能访问静态属性,不能访问非静态属性和对象

static修饰变量:static修饰的变量属于类变量,该变量被该类所产生的所有对象共享

static修饰的是方法,this修饰的是类

static修饰的方法属于类方法:

(1)this关键字不能在static方法中使用。

(2)静态方法不能使用非静态方法

(3)非静态方法能使用静态方法。

(4)静态方法可以调用静态方法

static代码块:static修饰的代码块在main方法之前执行,以便于优化程序,优化main方法

3、final

final修饰的变量:

final修饰的变量叫做常量,只能被赋值一次,值不能变化

基本数据类型:其数值一旦在初始化之后便不能更改

引用数据类型:在对其初始化之后便不能再让其指向另一个对象,但指向该对象的内容可以改变

final固定的是一个地址

final修饰全局变量:必须赋值,否则变量出栈时需要修改方法区中的值,这样不符合final得到特性

final修饰局部变量(存在方法区中):final修饰的局部变量可以不赋初始值,但是要想使用这个局部变量,就必须赋值

final修饰的方法:不能被重写,如果你有两个方法,该方法必须被子类重写,那么一定不能定义成final类型

final修饰的类:不能被继承

final的作用:防止变量被二次赋值防止方法重写,防止类被继承,防止指令重排序

4、基本数据类型:

整型:byte(-128~127 8位 1个字节)short int long

浮点型:float double 字符:char boolean

    public static void main(String[] args) {
        byte c = 10;
        c = c+1;//会报错 需要强制类型转换 
        c+=1;//不会报错
        System.out.println(c);
​
    }

自动拆装箱:是一个编译器行为 是java编译器做的一个语法糖行为

装箱 valueOf

拆箱:对象.intvalue 对象.longValue()

   Integer a = 1;
   int c = a.intValue();
   int intValue = 42;
   Integer integerValue = Integer.valueOf(intValue); // 将int转换为Integer对象

128陷阱 博客:

5、String类

string不可变 :我们对字符串做出的操作都会产生不同的字符串

string类型没有提供任何修改字符串的方法(防止他的值可以变)

final修饰string类 不能被继承 也就是没法通过重写父类方法的方式 修改值

final修饰了char类型数组(数组也是private修饰的) 保证一旦被赋值之后指向不可变 但是他的值可以变

好处:可以共享数据

提高处理字符串拼接的效率 :stringbuffer线程安全(对类中大部分方法都加了synchronized 锁) stringbuilder单线程下效率高

每一个数组都是java中的一个新创建的类型 比如int[] 数组 他的类型时 int数组类型

冒泡、快排、堆排序、要熟练掌握 Arrays.sort应用

6、抽象类和接口的区别

语义上:

继承抽象类是为了代码复用(提供一种模版)(描述事务本身的(特质)特点和属性)

实现接口更多是为了定义一个规范或者行为准则(接口更多是描述某种行为和能力比如我定义一个飞的接口,那么所有实现这个接口的类都具有飞的能力)

现实使用上区别不大。

java中是单继承多实现的

抽象类可以有普通方法、构造函数 普通域。

接口这些都没有。

7、面向对象编程的特点

封装、继承、多态

如何体现?

封装:把现实世界中的客观事物抽象成一个java类,然后在类中存放属性和方法,比如抽象一个汽车类其中有发动机、车轮等属性,又有启动、前进等方法。

多态:子类继承父类

子类重写父类方法

父类引用指向子类对象

8、程序执行第一步只是给静态变量和静态块赋初始值(0,null等)不会直接将对应的值给他

第二轮才是给对应的值 这个时候如果给静态的对象实例化 从上往下执行(先不管其他对象的实例化)非静态的初始语句初始化块执行

9、类加载的先后顺序

10、Object类所有类的基类

没重写调用的就是Object里面的equals就是==

equals和==区别

基本类型 == 比较值

引用类型 equals比较两个对象的值是否相同

重写equals就要重写hashCode

因为我们重写equals就是为了实现只要两个对象的值相同那么 返回就是true 比如在hashmap里面

如果我们重写了equals方法让他实现值相同就返回true,理论上euqals返回true说明值相同那么他们的hashCode值应该相同,如果不重写它是根据对象的地址生成的hashCode他的值不同,所以我们要重写hashcode保证他时根据对象内容生成的hashcode

基本方法:getClass 、toString、clone、notifyALL 、notify、equals hasCode

11、内部类:

局部内部类、

普通内部类

静态内部类

匿名内部类:匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

public class Test2 {
    public static void main(String[] args) {
        Thread a = new Thread(new Test3());
        a.start();
        Thread b = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("122223");
            }
        });
        b.start();
    }
​
}
class Test3 implements Runnable{
​
    @Override
    public void run() {
        System.out.println("123");
    }
}

new Runnable(){}; 代替了Test3实现Runnable接口的步骤,不用写实现类的类名,直接在小括号后面加大括号里面写实现相应的方法

lamndan表达式:

public class Test2 {
    public static void main(String[] args) {
        Thread c = new Thread(()-> System.out.println("123457"),"c");
        c.start();
    }
​
}
//,后面的"c" 是起了一个名字有没有都可以
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值