1. 跨平台原理
平台:指的是操作系统(Windows,Linux,Mac)
跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行
原理:实现跨平台需要依赖Java的虚拟机JVM (Java Virtual Machine)
2. JVM JRE JDK
A:什么是JVM
JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己的虚拟机,因此java语言可以跨平台
B:什么是JRE
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JRE:JVM+类库。
C:什么是JDK
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JDK:JRE+JAVA的开发工具。
D:为什么JDK中包含一个JRE呢?
开发完的程序,需要运行一下看看效果。
E:JDK,JRE,JVM的作用和关系
JDK包含JRE 和开发工具包
JRE 包含 核心类库和JVM
面向对象
1.面向过程思想与面向对象思想
A:什么是面向过程
面向过程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
B:什么是面向对象
面向对象思想就是不断的创建对象,使用对象,指挥对象做事情。(如果有对象,直接用对象,对我们直接提供服务)
面向对象思想:
面向对象是基于面向过程的一种编程思想。
面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能
面向对象的思想特点:
A:是一种符合我们思考习惯的思想
B:可以将复杂的事情简单化
C:让我们从执行者变成了指挥者
2.一个对象的内存图图解
两个对象的内存图(共用方法区)图解
两个对象的内存图(两个引用指向同一个堆内存)图解
3.成员变量和局部变量区别
成员变量和局部变量的区别:
A:在类中的位置不同
成员变量:在类中,方法外
局部变量:在方法中或者方法声明上(形式参数)
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须先定义,赋值,最后使用
4.封装的概述和好处
A:封装概述
是面向对象三大特征之一
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
B:封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
成员变量private,提供对应的getXxx()/setXxx()方法
C:好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性
5.this关键字由来和使用
A:this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
B:什么时候使用this呢
局部变量和成员变量重名
6.构造方法:用于给对象的数据进行初始化
格式:
方法名和类名相同
没有返回值类型,连void都不能写
没有具体的返回值
构造方法的注意事项:
A:如果我们没有给出构造方法,系统将给出一个默认的无参数构造方法供我们使用
B:如果我们给出了构造方法,系统将不再提供默认的构造方法供我们使用。
这个时候,我们如果还想使用无参数构造方法,就必须自己提供。
我们推荐:自己给出无参数构造方法。
C:构造方法也是可以重载的。
给成员变量赋值的方式:
A:通过setXxx()
B:通过构造方法
7.继承
继承的格式:
public class 子类名 extends 父类名 {}
继承的好处:
A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类之间产生了关系,是多态的前提
继承的弊端:
让类与类之间产生了关系,也就让类的耦合性增强了。
开发原则:高内聚,低耦合。
内聚:就是自己完成某件事情的能力
耦合:类与类的关系
Java中只支持单继承,不支持多继承
–一个类只能有一个父类,不可以有多个父类
–public class Son extends Father{} // ok
–public class Son extends Father,GrandFather // Error
Java中类支持多层继承(继承体系)
–Public class GrandFather{}
–Public class Father extends GrandFather{}
–Public class Son extends Father{}
Java继承中成员变量的特点:
A:成员变量名称不一样,使用的时候非常简单。
B:成员变量名称一样的情况
在子类方法中访问变量:
a:在方法的局部范围找,如果有就使用
b:在子类的成员范围找,如果有就使用
c:在父类的成员范围找,如果有就使用
d:如果还找不到,就报错
就近原则。
8.super关键字
super和this的用法很像:
this:代表本类对象的引用
super:代表父类的存储空间(可以理解为代表父类对象的引用)
用法:
访问成员变量:
this.成员变量
super.成员变量
访问构造方法:
this(...)
super(...)
访问成员方法:
this.成员方法()
super.成员方法()
9.Java继承中构造方法的访问特点:
A:子类构造方法执行前都会先执行父类无参构造方法
B:为什么呢?
因为子类继承父类,会继承父类的非私有成员。
而子类在初始化的时候,可能会使用父类的数据,如果父类数据没有先初始化,
子类就不能使用这些数据,所以,在子类初始化之前,一定要先完成父类数据的初始化。
注意:在子类的构造方法中,默认第一行有一条语句:super()
问题:假如父类中没有无参构造方法,怎么办呢?
A:在父类中添加一个无参构造方法。
B:可以通过super去访问父类的带参构造方法。
建议使用第一种解决方案,其实就是要求我们写代码的时候,每次都手动的给出无参构造方法。
2.4方法重写的概述和使用
10.方法重写的概述
方法重写:
子类中出现了和父类中一摸一样的方法声明
方法重写的应用
当子类需要父类的功能,而功能主体子类又有自己的特有内容的时候,就考虑使用方法重写,
这样即保证了父类的功能,还添加了子类的特有内容。
方法重写的注意事项
-@Override
-表明该方法的重写父类的方法
·方法重写的注意事项
-父类中私有方法不能被重写
-子类重写父类方法时,访问权限不能更低
-子类重写父类方法时,建议访问权限一摸一样
11.多态
多态:同一个对象,在不同时刻体现出来的不同状态。
多态中成员的访问特点:
A:成员变量
编译看左边,执行看左边。
B:成员方法
编译看左边,执行看右边。
为什么成员变量和成员方法的访问不一样呢?
因为成员方法有重写,而变量没有。
多态的好处:
提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
多态的弊端:
不能使用子类的特有功能
多态中的转型问题
向上转型
从子到父
父类引用指向子类对象
向下转型
从父到子
父类引用转为子类对象