概述
目录
第1章 面向对象思想
1.1 面向对象思想概述
概述
举例
特点
1.2 类和对象
什么是类
什么是对象
类与对象的关系
1.3 类的定义
事物与类的对比
类的定义格式
1.4 对象的使用
对象的使用格式
成员变量的默认值
1.5 类与对象的练习
1.6 对象内存图
一个对象,调用一个方法内存图
两个对象,调用同一方法内存图
一个引用,作为参数传递到方法中内存图
1.7 成员变量和局部变量区别
第2章 封装
2.1 封装概述
概述
原则
好处
2.2 封装的步骤
2.3 封装的操作——private关键字
private的含义
private的使用格式
2.4 封装优化1——this关键字
this的含义
this使用格式
2.5 封装优化2——构造方法
构造方法的定义格式
2.6 标准代码——JavaBean
第1章 面向对象思想
1.1 面向对象思想概述
概述
Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
举例
洗衣服:
-
面向过程:把衣服脱下来-->找一个盆-->放点洗衣粉-->加点水-->浸泡10分钟-->揉一揉-->清洗衣服-->拧干-->晾起来
-
面向对象:把衣服脱下来-->打开全自动洗衣机-->扔衣服-->按钮-->晾起来
区别:
-
面向过程:强调步骤。
-
面向对象:强调对象,这里的对象就是洗衣机。
特点
面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。
面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
1.2 类和对象
环顾周围,你会发现很多对象,比如桌子,椅子,同学,老师等。桌椅属于办公用品,师生都是人类。那么什么是类呢?什么是对象呢?
什么是类
- 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,是对现实生活中一类具有共同属性和行为的事物的抽象,使用事物的属性特征和行为特征来描述该类事物。
- 类的特点:
- 类是对象的数据类型
- 类是具有相同属性和行为的一组对象的集合
- 属性:就是该事物的状态信息。 (特征)
- 行为:就是该事物能够做什么。
举例:小猫。
属性:名字、体重、年龄、颜色。
行为:走、跑、叫。
什么是对象
- 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。
现实中,一类事物的一个实例:一只小猫。
举例:一只小猫。
属性:tom、5kg、2 years、yellow。
行为:溜墙根走、蹦跶的跑、喵喵叫。
类与对象的关系
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板(抽象),对象是类的实体。
1.3 类的定义
事物与类的对比
现实世界的一类事物:
属性:事物的状态信息。 行为:事物能够做什么。
Java中用class描述事物也是如此:
类的重要性:是Java程序的基本组成单位
成员变量:对应事物的属性 成员方法:对应事物的行为
类的定义格式
public class ClassName {
//成员变量
//成员方法
}
定义类:就是定义类的成员,包括成员变量和成员方法。
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
成员方法:和以前定义方法几乎是一样的。只不过把static去掉,static的作用在面向对象后面课程中再详细讲解。
类的定义格式举例:
public class Student {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//学习的方法
publicvoid study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
publicvoid eat() {
System.out.println("学习饿了要吃饭");
}
}
1.4 对象的使用
对象的使用格式
创建对象:
类名 对象名 = new 类名();
对象名.成员变量;
对象名.成员方法();
public class Test01_Student {
public static void main(String[] args) {
//创建对象格式:类名 对象名 = new 类名();
Student s = new Student();
System.out.println("s:"+s); //cn.itjava.Student@100363
//直接输出成员变量值
System.out.println("姓名:"+s.name); //null
System.out.println("年龄:"+s.age); //0
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
s.name = "小红";
s.age = 18;
//再次输出成员变量的值
System.out.println("姓名:"+s.name); //小红
System.out.println("年龄:"+s.age); //18
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
s.study(); // "好好学习,天天向上"
s.eat(); // "学习饿了要吃饭"
}
}
成员变量的默认值
数据类型 | 默认值 | |
基本类型 |
整数(
byte
,
short
,
int
,
long
)
| 0 |
浮点数(
flfloat
,
double
)
| 0.0 | |
字符(
char
)
|
'u0000'
| |
布尔(
boolean
)
|
false
| |
引用类型 |
数组,类,接口
|
null
|
1.5 类与对象的练习
定义手机类:
public class Phone {
// 成员变量
String brand; //品牌
int price; //价格
String color; //颜色
// 成员方法
//打电话
public void call(String name) {
System.out.println("给"+name+"打电话");
}
//发短信
public void sendMessage() {
System.out.println("群发短信");
}
}
public class Test02Phone {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//输出成员变量值
System.out.println("品牌:"+p.brand);//null
System.out.println("价格:"+p.price);//0
System.out.println("颜色:"+p.color);//null
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
p.brand = "锤子";
p.price = 2999;
p.color = "棕色";
//再次输出成员变量值
System.out.println("品牌:"+p.brand);//锤子
System.out.println("价格:"+p.price);//2999
System.out.println("颜色:"+p.color);//棕色
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐"); //调用成员方法
p.call("热巴");
p.sendMessage();
}
}
1.6 对象内存图
一个对象,调用一个方法内存图
![](https://file2.kaopuke.com:8081/files_image/2023060823/20200505115423497.png)
通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中的空间,寻找方法信息,去执行该方法。 但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。
两个对象,调用同一方法内存图
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。
一个引用,作为参数传递到方法中内存图
引用类型作为参数,传递的是地址值。
1.7 成员变量和局部变量区别
变量根据定义位置的不同,我们给变量起了不同的名字。如下图所示:
- 成员变量:类中方法外的变量
- 局部变量:方法中的变量
成员变量和局部变量区别
- 在类中的位置不同 (重点)
- 成员变量:类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
- 作用范围不一样(重点)
- 成员变量:类中
- 局部变量:方法中
- 初始化值的不同 (重点)
- 成员变量:有默认的初始化值
- 局部变量:没有默认值。必须先定义,赋值,最后使用
- 在内存中的位置不同 (了解)
- 成员变量:堆内存
- 局部变量:栈内存
- 生命周期不同 (了解)
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
第2章 封装
2.1 封装概述
概述
原则
好处
- 通过方法来控制成员变量的操作,提高了代码的安全性
- 把代码用方法进行封装,提高了代码的复用性
2.2 封装的步骤
2.3 封装的操作——private关键字
private的含义
- 提供"get变量名()"方法,用于获取成员变量的值,方法用public修饰
- 提供"set变量名(参数)"方法,用于设置成员变量的值,方法用public修饰
private的使用格式
private 数据类型 变量名 ;
public class Student {
private String name;
private int age;
}
public class Student {
private String name;
private int age;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
}
2.4 封装优化1——this关键字
public class Student {
private String name;
private int age;
public void setName(String name) {
name = name;
}
public void setAge(int age) {
age = age;
}
}
this的含义
- 方法的形参如果与成员变量同名,不带this修 饰的变量指的是形参,而不是成员变量
- 方法的形参没有与成员变量同名,不带this修 饰的变量指的是成员变量
什么时候使用this呢? 解决局部变量隐藏成员变量
记住 :方法被哪个对象调用,方法中的 this 就代表那个对象。即谁在调用, this 就代表谁。
this使用格式
this.成员变量名;
public class Student {
private String name;
private int age;
public void setName(String name) {
//name = name;
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
//age = age;
this.age = age;
}
public int getAge() {
return age;
}
}
小贴士:方法中只有一个变量名时,默认也是使用 this 修饰,可以省略不写。
2.5 封装优化2——构造方法
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
构造方法的作用:创建对象
小贴士:①构造方法的创建:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。
②构造方法的重载:如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
③推荐的使用方式:无论是否使用,都手工书写无参数构造方法
构造方法的定义格式
修饰符 构造方法名(参数列表){
// 方法体
}
(修饰符一般用public)
public class 类名{
修饰符 类名(参数) {
}
}
public class Student {
private String name;
private int age;
// 无参数构造方法
public Student() {}
// 有参数构造方法
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}
2.6 标准代码——JavaBean
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}
创建对象并为其成员变量赋值的两种方式
- 无参构造方法创建对象后使用setXxx()赋值
- 使用带参构造方法直接创建带有属性值的对象
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
//成员方法
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age ){
this.age=age;
}
public int getAge(){
return age;
}
public void show(){
System.out.println(name+","+age);
}
}
public class StudentDemo {
public static void main(String[] args) {
//无参构造方法创建对象后使用setXxx()赋值
Student s1=new Student();
s1.setName("林青霞");
s1.setAge(30);
s1.show();
//使用带参构造方法直接创建带有属性值的对象
Student s2=new Student("林青霞",30);
s2.show();
}
}
最后
以上就是炙热老鼠为你收集整理的【Java基础知识回顾】 || 06_类与对象、封装、构造方法第1章 面向对象思想 第2章 封装 的全部内容,希望文章能够帮你解决【Java基础知识回顾】 || 06_类与对象、封装、构造方法第1章 面向对象思想 第2章 封装 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复