一、面向对象思想
1.基于过程思想:给一个需求,通过分析需求,然后一步一步的去实现!完成一个功能的具体步骤!
面向对象思想:创建对象,使用对象调用功能!(主要:对象)
2.面向对象思想的特点:
1)更符合我们的一些思想行为习惯
2)让复杂的事情简单化
3)让我们从执行者变成指挥者
3.面向对象:
把大象塞进冰箱案例:
首先要分析这个需求有哪些类?(UML:名词提取法) 冰箱 大象
4. 面向对象的三大特征: 1)封装2)继承3)多态
二、类与对象及其使用
1. 我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
2. 类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:
类学生
对象班长就是一个对象
3.类的定义:
1)现实世界的事物: 属性人的身高,体重等
行为人可以学习,吃饭等
2)Java中用class描述事物也是如此:成员变量就是事物的属性
成员方法就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
4.类的成员方法:成员方法其实就是我们前面讲过的方法
1)方法具体划分:(根据返回值):有明确返回值方法
返回void类型的方法
(根据形式参数):
无参方法
带参方法
5.一个基本类的标准代码写法:
1)类: 成员变量
构造方法:无参构造方法
带参构造方法
成员方法:getXxx() setXxx()
2)给成员变量赋值的方式: 无参构造方法+setXxx()
带参构造方法
6.类的初始化过程:
Student s = new Student();在内存中做了哪些事情?
1)加载Student.class文件进内存
2)在栈内存为s开辟空间
3)在堆内存为学生对象开辟空间
4)对学生对象的成员变量进行默认初始化
5)对学生对象的成员变量进行显示初始化
6)通过构造方法对学生对象的成员变量赋值
7)学生对象初始化完毕,把对象地址赋值给s变量
三、对象内存图
1. 一个对象的内存图解:
2.两个对象的内存图解:
3.三个对象的内存图解:
四、成员变量和局部变量的区别
成员变量的位置:类中成员方法外
1. 在类中的位置不同
a:成员变量:在类中,方法外
b:局部变量:在方法声明上,或者是在方法定义中
2. 在内存里面的位置不一样
a:成员变量:在堆内存
b:局部变量:在栈内存
3. 生命周期不同
a:成员变量:随着对象的创建而存在,随着对象的消失而消失
b:局部变量:随着方法调用而存在,随着方法的调用结束而消失
4. 初始化值不同
a:成员变量:有默认值:int类型:0引用类型:null
b:局部变量:必须初始化值,否则报错!(在使用它之前,没有初始化)
注意:当局部变量名称和成员变量名称一致的时候,就近原则!
五、匿名对象
匿名对象:就是没有名字的对象
调用:执行一次
不适合多次调用
匿名对象可以作为参数进行传递
六、封装
1. 封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2. 好处: 1) 隐藏实现细节,提供公共的访问方式
2)提高了代码的复用性
3)提高安全性。
3. 封装原则: 1)将不需要对外提供的内容都隐藏起来。
2)把属性隐藏,提供公共方法对其访问。
4.private关键字:1)a. 是一个权限修饰符。
b.可以修饰成员(成员变量和成员方法)
c.被private修饰的成员只在本类中才能访问。
2)private最常见的应用:
a.把成员变量用private修饰
b.提供对应的getXxx()/setXxx()方法
七、this关键
1.this:代表所在类的对象引用
1)记住:方法被哪个对象调用,this就代表那个对象
2)什么时候使用this呢?
局部变量隐藏成员变量
其他用法后面和super一起讲解
2. 定义手机类:测试:
成员变量:私有化:
例:private String brand ;
成员方法:set()/get(),打电话/发短信
set()/get()方法 :快捷键:Alt+shift+s:
3. 定义一个学生类:
成员变量:姓名,年龄,性别
成员方法:set()/get(),study(),sleep()
给变量起名字:见名知意
this:代表当前类的对象
举例:
class Student{
//定义成员变量
private String name ;
private int age ;
private String gender ;
/*//提供get()/set()公共的访问方法
//姓名获取值
public String getName(){
return name ;
}
//姓名赋值
public void setName(String name){//局部变量 "高圆圆"
this.name = name ;//前面的name属于成员变量:局部变量和成员变量名称一致:就近原则:局部变量隐藏了成员变量
*第一个name:应该Student类里面的name
*这种情况:为了区分成员变量和局部变量.java提供了关键字:this
* this:代表当前对象的引用,简单记:代表当前类的一个对象
*
}
//年龄获取值
public int getAge(){
return age ;
}
//年龄赋值
public void setAge(int age){
this.age = age;
}
//性别获取值
public String getGender(){
return gender;
}
//性别赋值
public void setGender(String gender){
this.gender = gender ;
}*/
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
//测试类
public class StudentTest {
public static void main(String[] args) {
//创建对象
Student s = new Student() ;
s.setName("高圆圆") ;
s.setAge(27) ;
s.setGender("女") ;
System.out.println(s.getName()+"-----"+s.getAge()+"-----"+s.getGender());
}
}
八、构造方法
1.构造方法:给数据进行初始化的
2.构造方法格式: 1)方法名与类名相同
2)没有返回值类型,连void都没有
3)没有具体的返回值
3.构造方法注意事项:
1)如果你不提供构造方法,系统会给出默认构造方法
2)如果你提供了构造方法,系统将不再提供
3)构造方法也是可以重载的:方法名相同,参数列表(参数个数/参数类型)不同,与返回值没有关系
4.给成员变量赋值:
两种方式:
公共的访问方法:set()
构造方法给成员变量赋值
九、static关键字
1.可以修饰成员变量和成员方法
2. static关键字特点:1)随着类的加载而加载
2)优先于对象存在
3)被类的所有对象共享
这也是我们判断是否使用静态关键字的条件
4)可以通过类名调用
3. Static关键字注意事项:
1)在静态方法中是没有this关键字的
2)静态方法只能访问静态的成员变量和静态的成员方法