Java核心知识点

作为新手学习java基础的学习笔记,仅为自用,欢迎交流,不喜勿喷哦



前言

本文主要是针对Java核心知识点的总结,方便后续的回顾。


1、JVM、JRE及JDK的关系?

JDK是Java的开发工具,JRE是Java程序运行所需的环境,JVM是Java虚拟机,其中JDK包含JRE和JVM,JRE包含JVM。

2.JAVA语言特点?

Java是一种面向对象的语言;Java通过Java虚拟机实现了平台无关性;Java支持多线程;Java支持较高的安全性和可靠性。

3.JAVA和C++的区别?

  1. Java能够实现跨平台特性,而C++依赖于特定的平台;
  2. Java没有指针,而C++具有指针;
  3. Java支持自动垃圾回收,而C++需要手动回收;
  4. Java不支持多重继承,只能通过实现多个接口来达到相同的目的,而C++支持多重继承。

4.Java的基本数据类型

类型关键字(占用字节)
字节型byte(1)
短整型short(2)
整型int(4)
长整型long(8)
单精度浮点型float(4)
双精度浮点型double(8)
字符型char(2)
布尔型boolean(1)

5.String(不是基本数据类型)

String类型的不可变性:
在 Java 8 中, String 内部使用 char 数组存储数据。并且被声明为 final ,因此它不可被继承。

5.String和StringBuffer、StringBuilder的区别是什么?

1.可变性:String 不可变,StringBuilder 和 StringBuffer 是可变的;
2.线程安全性:String 是不可变的,线程安全, StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,线程安全,StringBuilder 并没有对方法进行加同步锁,非线程安全;
3.性能:StringBuilder高于StringBuffer高于String。

5.访问修饰符

四种权限访问修饰符:

  1. public : 对所有类可见。使用对象:类、接口、变量、方法;
  2. protected : 对同一包内的类和所有子类可见。使用对象:变量、方法;
  3. default : 在同一包内可见。使用对象:类、接口、变量、方法;
  4. private : 在同一类内可见。使用对象:变量、方法。

6.关键字

  1. static关键字:

在Java中,static关键字用于创建类级别的变量和方法,这意味着它们与类本身相关联,而不是与类的实例相关联;
静态变量(也称为类变量)是所有类的实例共享的变量,而静态方法是可以直接通过类名调用的方法,而不需要创建类的实例;
静态成员可以在任何地方使用,而不需要实例化类。

  1. final关键字:

final关键字可用于变量、方法和类。当应用于变量时,它指示变量是一个常量,其值只能被分配一次,并且无法修改;
当final应用于方法时,它表示该方法不能被子类重写(覆盖);
当final应用于类时,它表示该类不能被继承。

  1. this关键字:

this关键字是一个引用,它指向当前对象的实例;
在Java中,this关键字用于引用当前类的实例变量和方法,以便在方法内部解决命名冲突;
可以通过this关键字访问当前对象的成员变量和方法。

  1. super关键字:

super关键字用于在子类中调用父类的构造方法、访问父类的成员变量和方法;
在子类构造方法中,可以使用super()调用父类的构造方法,以初始化父类的状态;
可以使用super来引用父类的成员,解决子类与父类成员同名的冲突,或者在子类中访问父类的方法和变量。

7.面向对象和面向过程的区别

面向过程的性能比较高,而面向对象易维护、易复用、易扩展。

8.面向对象三大特性

  1. 继承:一个类可以基于另一个类来建立,并且继承类(子类)可以重用父类的属性和方法。子类继承了父类的特征和行为,并且可以增加新的特征和行为,同时也可以修改或覆盖父类的行为;
  2. 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级
    别;
  3. 多态:同一个接口可以有多种不同的实现方式,即同一个方法可以在不同的对象上有不同的行为。多态可以通过方法重载(Overloading)和方法重写(Overriding)来实现。

8.面向对象五大基本原则

  1. 单一职责原则:一个类,最好只做一件事,只有一个引起它的变化;
  2. 开放封闭原则:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的;
  3. 里氏替换原则:子类型必须能够替换掉其父类型,并且程序不会产生错误或异常。也就是说,派生类(子类)必须能够替换其基类(父类)的实例,并且程序的行为不会改变;
  4. 依赖倒置原则:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象;
  5. 接口隔离原则:客户端不应该依赖于它不使用的接口。也就是说,不应该强迫客户端依赖于它们不需要的接口。应该将大接口拆分为更小、更具体的接口,以使接口更加清晰和可用。

9.抽象类和接口的比较

类型抽象类(abstract class)接口( Interface)
实现extendsimplements
继承抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类接口只可以继承接口(一个或多个);子类可以实现多个接口
访问修饰符public、protected和default修饰符默认修饰符是public
构造器可以有构造器不能有构造器
字段声明可以是任意的默认都是 static 和 final

10.变量

类变量实例变量局部变量
定义位置类中,方法外类中,方法外方法中
初始值
存储位置方法区
生命周期类何时被加载和卸载实例何时被创建及销毁方法何时被调用及结束调用

11.内部类

  1. 成员内部类:定义在另一个类的内部的类,并且它是外部类的一个成员。成员内部类可以访问外部类的所有成员,包括私有成员,并且可以使用外部类的引用(this关键字)来访问外部类的实例;
  2. 局部内部类:定义在方法或作用域内部的类。局部内部类只在定义它的方法或作用域中可见,并且不能被其他方法访问;
  3. 匿名内部类:一种没有类名的局部内部类,它通常用于创建只需一次使用的对象。匿名内部类通常在创建接口实例或继承父类并覆盖其方法时使用;
  4. 静态内部类:一个嵌套在外部类中的静态类,它可以直接通过外部类的类名来访问,并且不依赖于外部类的实例。

12.重载和重写的区别

  1. 重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与
    方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分;
  2. 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于
    父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为 private 则子类中
    就不是重写。

13.== 和 equals 的区别

  1. ==运算符:
    对于基本数据类型, == 比较的是值;对于引用数据类型, == 比较的是内存地址。
  2. eauals()方法:
    对于没有重写 equals 方法的类, equals 方法和 == 作用类似;对于重写过 equals 方法的类,
    equals 比较的是值。

14.BIO,NIO,AIO 有什么区别?

  1. BIO (Blocking I/O):

同步阻塞I/O模型。在BIO中,当一个线程执行一个I/O操作时,该线程会被阻塞,直到I/O操作完成。这意味着在执行I/O操作期间,线程无法执行其他任务,因此需要为每个连接创建一个单独的线程来处理I/O操作。

  1. NIO (New I/O):

同步非阻塞I/O模型。在NIO中,可以使用单个线程处理多个连接(通道),这是通过使用选择器(Selector)来实现的。

  1. AIO (Asynchronous I/O):

异步非阻塞I/O模型。在AIO中,应用程序发起I/O操作后不需要等待操作完成,而是继续执行其他任务,当I/O操作完成时,会得到通知。

15.反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个
对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为
java语言的反射机制。

16.Java异常

异常主要分为 Error 和 Exception 两种。

  1. Error:Error 类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处
    理。
  2. EXception:Exception 以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被
    Java异常处理机制使用,是异常处理的核心。

17.JAVA泛型

Java泛型是一种参数化类型的概念,它使得类或方法可以在声明时指定参数类型,从而提高了代码的灵活性和安全性。泛型最大的优势在于可以在编译时检查类型安全,避免了在运行时出现类型转换错误。
**泛型擦除:**泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。

18.深拷贝与浅拷贝

  1. 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,两个
    引用指向两个对象,但对象内容相同。
  2. 浅拷贝:对基本数据类型进行值传递,对引用数据类型复制一个引用指向原始引用的对象,浅拷贝
    会直接复制内部对象的引用地址,就是复制的引用和原始引用指向同一个对象。

总结

以上是今天要讲的内容。本文仅仅简要介绍了Java的一些核心知识点,详细的内容需要在后续深入学习和探索。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值