面向过程 | 面向对象 | |
---|---|---|
性能 | 高于面向对象 | 类加载的时候需要实例化,比较消耗资源 |
三易(易维护,易复用,易扩展) | 不如面向对象 | 具有封装,继承,多态的特性,可以设计低耦合的系统,有助于系统维护,扩展,复用 |
总结:
Unix/Linux
系统,单片机等等操作系统之类的
可以到.java
文件通过Java
编译器(javac.exe
)编译成为.class
文件。这个.class
文件就是字节码文件,它是一种提供给JVM
解释执行的文件。每一个平台的都相同,由于通过不同的Java
解释器解释形成不同的机器码文件,使操作系统执行。
任何一种可以解释执行Java字节码文件的软件均可以看做虚拟机(JVM)
★任何一个JVM都包含:方法区,Java堆,Java栈,本地方法栈及其隐含寄存器 ”
一个程序中可以拥有多个类,但仅仅只能存在一个主类。在Java程序中,拥有main
方法的类被称为主类。
JDK
是指Java
开发环境,内部包含JRE
和java
开发工具。如:javac.exe
,java.exe
,jar.exe
JRE
是指Java
运行环境,可以通过JRE
来运行Java程序path
环境变量指定JAVA_HOME/bin
来直接操作Java
命令classpath
环境变量指定生成的.class
的存放目录ASCII
码值,它仅仅占一个字符Java语言采用了Unicode
编码标准,他为每一个字符定制了一个唯一的数值,因此可以在任意的平台使用
父类的私有属性和构造方法并不能被继承,所以Constructor
不能被重写,但是可以被重载
重载:发生在同一个类中,方法名相同,方法参数的个数、顺序、类型不同或者方法返回值或访问修饰符不同的时候,就称为重载
重写:发生在不同的类中,且该类之间存在继承关系。当子类的方法名字,参数完全相同且其访问修饰符大于或者等于父类方法的访问修饰符的时候称为方法的重写
SRP
)OCP
)LSP
)DIP
)byte
一个字节short
两个字节int
四个字节long
八个字节。表示为1234654564651L
。后面通过L
声明为一个long类型float
四个字节。表示为12.12345646f
。后面通过f
声明为一个Float类型double
八个字节boolean
仅仅存在两个值true
或者false
char
一个字节class
类型String
也是一个类类型,成为字符串类型enum
枚举类型this | super | |
---|---|---|
作用 | 调用本类对象的方法或者属性 | 调用父类的public或者protected方法或者属性 |
方法 | this(参数)调用本类中的构造方法 | super(参数)调用父类的构造方法 |
内存表现 | 当前类的内存地址 | 可以理解为父类的内存地址 |
static | no static | |
---|---|---|
调用方式 | 类名调用 | 对象调用 |
内存表现 | 存在于方法区的静态区 | 堆中 |
生命周期 | 类消亡的时候消亡 | 对象消亡的时候消亡 |
线程安全 | 共享数据,所以会存在并发问题 | 仅仅针对一个对象,所以无并发问题 |
★为什么要有抽象类? Java将一些特性抽取形成一个抽象的模型,但是这个模型不能被实例化,因为他没有任何具体的特征,只能作为一个参考模板。它可以通过被继承获得其内部的所有的属性和方法 ”
抽象类特点:
abstract
关键字修饰static
修饰final
修饰,因为其本身不能实例化,作用仅仅是为了让子类重写,而final作用在类上就不能继承了private
修饰,修饰以后子类无法重写★接口,相当于一个标准,只有实现了这个标准才可以做具体的事情,比如JDBC,JDK提供了一套连接数据库的接口,各大数据库厂商实现这些接口,来让Java连接他们的数据库。 ”
接口的特点:
interface
关键字修饰public static final
修饰public abstract
修饰JDK1.8
出现了defalut
方法可以拥有方法体接口的作用
抽象类 | 接口 | |
---|---|---|
关键字修饰 | abstract | interface |
是否可以被实例化 | 不可以 | 不可以 |
构造方法 | 存在构造方法 | 不存在构造方法 |
成员变量默认修饰 | 无默认修饰 | 默认被public static final修饰 |
方法 | 可以存在抽象也可存在非抽象方法 | 均为抽象方法或者默认方法 |
继承或实现 | 单继承 | 多实现(弥补多继承) |
本质 | is a 关系。从属关系 | like a 关系。强调功能 |
帮助子类做初始化工作
构造方法的作用是完成类的初始化工作,没有生命也可以执行,因为类默认存在构造方法
成员变量 | 局部变量 | |
---|---|---|
内存 | 跟随对象存放于堆中 | 存放于栈中 |
生命周期 | 跟随对象 | 跟随方法 |
初始化 | 会初始化 | 不会被初始化 |
Java中存在两种多态机制
★JVM在运行时默认是绑定在父类的引用上的,只有在遇到非静态方法的时候才会动态绑定到子类的引用上,当执行完子类的非静态方法以后又回到父类的引用上,知道下次遇到非静态方法 ”
★假设一个场景:Person person = new Person() 分析其内存的实际操作 ”
Java
栈中加载main
函数,建立main
函数的变量p
new
对象的时候需要person.class
文件,所以需要加载类Person
★这里有一个问题:为什么会将非静态方法也放置于方法区,而不是跟随对象生存。 ★ 非静态方法只有对象才可以调用,如果让类中的所有的静态方法都随着对象创建一次,非常占据系统资源。所以采用了让所有的对象共享这些方法,通过this关键字执行调用非静态方法的对象。 ” ”
Person
的成员属性进行默认初始化赋值Person
的成员属性进行赋值p
变量