1:面向对象和面向过程的比较
(1)面向过程
操作 动词 程序 = 算法+数据结构
(2)面向对象
对象 名词 程序 = 对象+消息
2: 类和对象
(1)概述
A:现实世界的事物
属性(数据)(静态) 事物的基本描述
行为(方法)(动态) 事物的功能
B:Java语言中最基本的单位是类。所以,我们要用类来体现事物
C:类 同一种事物的集合,它是一个抽象的概念。
成员变量 事物属性
成员方法 事物行为
D: 对象:它是类的一个具体的实例。
举例:
学生:类
班长:对象
(2) 类的定义及使用
A:类的定义
成员变量 定义格式和以前一样,就是位置不同,在类中,方法外。
成员方法 定义格式和以前一样,就是去掉了static。
格式
class 类名 {
int a;
public void show() {}
}
B:使用类的内容
a:创建对象
类名 对象名 = new + 构造方法();
b:如何访问成员变量和成员方法呢?
对象名.成员变量;
对象名.成员方法();
(3)案例:
A:学生类的定义和使用
B:手机类的定义和使用
(4)内存图
A:一个对象的内存图
B:二个对象的内存图
C:三个对象的内存图
(5)面向对象的特征
a:封装
b:继承
c:多态
3:成员变量和局部变量的区别
(1)在类中的位置不同
成员变量:成员位置
局部变量:方法内或者方法声明上
(2)在内存中的位置不同
成员变量:堆
局部变量:栈
(3)生命周期不同
成员变量:随着对象产生而开始,随着对象的消亡而结束
局部变量:随着方法的入栈而开始,随着方法的出栈而结束
(4)初始化值不同
成员变量:默认初始值
局部变量:不赋值不能使用
4:匿名对象
(1)没有名字的对象
new Student()
(2)应用场景
A:调用方法,仅仅只调用一次的时候。
new Student().study();
b:可以作为实际参数传递。
new Teacher().teach(new Student());
5:封装
(1)隐藏实现细节,提供公共的访问方式
(2)好处:
A:隐藏实现细节,提供公共的访问方式
B:提高代码的复用性
C:提高代码的安全性
(3)设计原则
把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式
(4)private是封装的一种体现。
包,类,方法,访问修饰符它们都是封装的一种技术
6:private关键字
(1)私有的意思,可以修饰成员
(2)特点:被private修饰的成员变量和成员方法只能在本类中访问,其他类不能访问。
(3)private的应用
对于一个pojo来说:
将成员变量用private修饰
提供相应的 setter & getter。
7:this关键字
(1)代表当前类的引用对象
记住:哪个对象调用方法,该方法内部的this就代表那个对象
(2)this的应用场景:
this 解决了局部变量隐藏成员变量的问题
8:构造方法
(1)作用:用于对对象的数据进行初始化
(2)格式:
A:方法名和类名一样
B:没有返回值类型,连void也没有
举例:
Student() {}
(3)构造方法的注意事项
A:如果你没有提供一个构造方法,系统会提供一个默认的无参构造方法
B:如果你提供了构造方法,系统将不会提供一个无参的构造方法
推荐:自己写一个无参的构造方法
C: 构造方法可以重载
D:构造方法不能递归调用
(4)给成员变量赋值的方式
A:无参构造方法 + setXxx()
B:带参构造方法
(5)标准pojo
class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
9: 对象的初始化过程
代码:Student s = new Student();做了哪些事情?
(1)加载Student.class到内存
(2)在栈上开辟为s变量开辟内存空间
(3)在堆上申请为对象申请内存空间
(4)对对象的成变量进行默认初始化
(5)对成员变量进行显示初始化
(6)执行构造方法
(7)将对象的地址赋值给s变量
10:static关键字
(1)静态的意思。可以修饰成员。表示这个成员是类所有。
(2)静态的特点:
A: 随着类的加载而加载
B: 优先于对象而存在
C: 被类的所有对象共享
D: 通过类名直接调用,也可以通过对象名调用,推荐使用类名调用
(3)静态的内存图
静态的内容在方法区的静态区
(4)静态的注意事项;
A: 在静态方法中没有this对象
B: 静态方法只能访问静态的内容
C: 成员方法可以访问静态的内容,也可以访问非静态的内容
(5)静态变量和成员变量的区别
A:所属不同
静态变量:类
成员变量:对象
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆
C:生命周期不同
静态变量:随着类的加载而开始,类的消失而结束
成员变量:随着对象的创建而开始,随着对象的消亡而结束
D:调用不同
静态变量:同过类名直接调用(推荐使用),通过对象调用(不推荐)。
成员变量:只能通过对象调用
(6)main方法是静态的
public: 因为main()是被JVM调用, 所以访问权限得够大
static: main()是程序的入口, 被调用的时候还没对象存在
void: 将返回值返回给JVM是没有意义的
main: 约定俗成的名字
String[] args: 早期用来接收键盘录入的数据
java Demo hello world java
11:如何制作帮助文档
(1)写一个类
(2)加入文档注释
(3)通过javadoc工具生成即可
javadoc -d 目录 -version -author -encoding gbk MyMath.java
12:如何查看文档
1) 包
2) 类的继承结构
3)概述
4) 版本
5) 构造方法
6) 查看的方法
13:通过JDK提供的API学习了Math类
(1) 产生随机数
public static double random();
[0, 1.0)
(2) 如何产生一个1-100之间的随机数
int number = (int)(Math.random()*100)+1;
(3) 猜数字小游戏
1. 如何循环录入数据
2. 二分查找
14:代码块
(1)用{}括起来的代码。
(2)分类:
A: 局部代码块
局部位置
限定变量的生命周期,及早释放内存空间,提高利用率
B: 构造代码块
成员位置
将构造方法的最前面的相同内容抽取出来,放在构造代码块中,用于给对象进行初始化
每次创建对象都会执行
C: 静态代码块
成员位置
给类进行初始化
随着类的加载而执行的,只执行一次
D: 同步代码块(后面讲)
(3)静态代码块,构造代码块,构造方法的顺序问题?
静态代码块 > 构造代码块 > 构造方法