Java基础知识点总结(自学使用)
以下内容为本人在工作后重新回过头来整理一些基础的知识点,内容参考了其他博客且部分参杂了自己的理解,可能有误!
后期会不断更新总结,已此文章为基础,鞭策自己学习
1. 什么是java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
2. JavaSE、JavaEE、JavaME是什么,区别
javaSE: 跑在桌面上的程序
javaEE: Web服务,企业级应用程序
javaME: 嵌入式程序
3. JVM、JRE和JDK的关系
JVM:java虚拟机,java程序需要运行在虚拟机上,不同平台都有自己的虚拟机,所以java可以实现跨平台
JRE:java运行时环境,其中包含了核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。如果要运行一个开发好的java程序,只需要安装jre即可
JDK: java开发环境,为程序开发人员准备。里面包含了编译工具:javac.exe,打包工具:jar.exe
JDK包含JRE和JVM,JRE包含JVN
4. 基本数据类型
类型 | 关键字 | 占用内存 |
---|---|---|
字节型 | byte | 1字节 |
短整型 | short | 2字节 |
整形 | int | 4字节 |
长整型 | long | 8字节 |
单精度浮点型 | float | 4字节 |
双精度浮点型 | double | 8字节 |
字符型 | char | 2字节 |
布尔型 | bool | 1字节 |
5. 访问修饰符
6. 面向对象或java 的三大特性
- 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。(类似定义对象,里面的get,set方法都是隐藏的,可以任意实现)
- 继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。
关于继承如下 3 点请记住:
a.子类拥有父类非 private 的属性和方法。
b.子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
c.子类可以用自己的方式实现父类的方法。 - 多态:在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。
方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。
7. 面向对象的五大基本原则
- 单一职责原则
类的功能要单一,不能包罗万象,跟杂货铺似的。 - 开放封闭原则
一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。 - 里式替换原则
子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。 - 依赖倒置原则
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的抽象是中国人,而不是你是xx村的。 - 接口分离原则
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
8. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载:在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,即重载的方法不能根据返回类型进行区分
重写:子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写;如果父类方法访问修饰符为private则子类中就不是重写。
9. == 和 equals 的区别是什么
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
常用的方式:==可以判断基本数据类型的值,如果比较对象是否相等,建议重写equals方法,对属性逐一比较
10. Java的反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
静态编译和动态编译
静态编译:在编译时确定类型,绑定对象
动态编译:运行时确定类型,绑定对象
举例:①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;②Spring框架也用到很多反射机制,最经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:1) 将程序内所有 XML 或 Properties 配置文件加载入内存中; 2)Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 3)使用反射机制,根据这个字符串获得某个类的Class实例; 4)动态配置实例的属性