目录
01面向对象思想
1.1面向对象思想的概述
-
概述
Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现 -
特点:面向对象有三大特征,封装,继承和多态。
1.2类和对象
-
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
举例:小猫。
属性:名字、体重、年龄、颜色。
行为:走、跑、叫。 -
对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
现实中,一类事物的一个实例:一只小猫。
举例:一只小猫。
属性:Tom、5公斤、2 岁、黄色。
行为:走、跑、喵喵叫。 -
类与对象的关系
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体 -
对象由类实例化出来,是一个类的具体表现。类是对象的抽象形式,对象是类的具体形式,好比类是模板,对象就是使用此模板制作的物品
1.3类的定义
- 现实世界的一类事物:
属性:事物的状态信息。
行为:事物能够做什么。 - Java中用类描述事物也是如此:
成员变量:对应事物的属性
成员方法:对应事物的行为
在C++中称之为成员函数和成员变量
- 类定义的格式:
public class ClassName {
//成员变量
//成员方法
}
定义类:就是定义类的成员,包括成员变量和成员方法。
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
成员方法:和以前定义方法几乎是一样的。
- 成员变量的默认值
数据类型 | 默认值 | |
---|---|---|
基本数据类型 | 整数(byte,short,int,long) | 0 |
基本数据类型 | 浮点数 (float,double) | 0.0 |
基本数据类型 | 字符 (char) | ‘\u0000’ |
基本数据类型 | 布尔(boolean) | false |
引用数据类型 | 数组,类,接口 | null |
- 定义一个猫类
public class Cat{
//成员变量,猫的属性
String name;
int weight;
int age;
String color;
//成员方法,猫的行为
public void walk(){
System.out.println("walk");
}
public void run(){
System.out.println("run");
}
public void miaow(){
System.out.println("miaow");
}
}
1.4对象的使用
- 对象的使用格式
创建对象:
类名 对象名 = new 类名();
使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法();
- 举例
public class Cat_01 {
/*
一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必
须与之一致,否则无法编译。
如果源文件中没有一个public类,则文件名与类中没有一致性要求。
至于main()不是必须要放在public类中才能运行程序。
*/
public static void main(String[] args) {
Cat cat01=new Cat();
cat01.name="Tom";
cat01.age=2;
cat01.weight=5;
cat01.color="yellor";
cat01.walk();
cat01.run();
cat01.miaow();
}
}
//猫类
class Cat{
//成员变量,猫的属性
String name;
int weight;
int age;
String color;
//成员方法,猫的行为
public void walk(){
System.out.println("walk");
}
public void run(){
System.out.println("run");
}
public void miaow(){
System.out.println("miaow");
}
}
1.5成员变量和局部变量的区别
变量根据定义位置的不同,我们给变量起了不同的名字。
- 在类中的位置不同 重点
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数) - 作用范围不一样重点
成员变量:类中
局部变量:方法中 - 初始化值的不同 重点
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用 - 在内存中的位置不同 了解
成员变量:堆内存
局部变量:栈内存 - 生命周期不同 了解
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
02封装
2.1封装的概述
- 概述:
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。 - 原则:
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
2.2封装的步骤
- 使用 private 关键字来修饰成员变量。
- 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
2.3封装的操作——private关键字
- private的含义:
- private是一个权限修饰符,代表最小权限。
- 可以修饰成员变量和成员方法。
- 被private修饰后的成员变量和成员方法,只在本类中才能访问
- private的使用格式:
//修饰成员变量
private 数据类型 变量名;
//修饰成员方法
private 返回值类型 方法名(数据类型 形参){
函数体
}
- 封装后如果类外想要访问本类中的成员变量,要对外提供公共的set和get方法
class Cat{
//成员变量,猫的属性,私有化
private String name;
private int weight;
public String getName() {
return name;
}
//对外提供相应的set和get方法
public void setName(String name) {
this.name = name;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
2.4this关键字
在上面的代码中,set方法里面有一个this关键字,它的作用是什么呢?不使用this关键字,直接name=name;
可以吗?
class Cat{
//成员变量,猫的属性,私有化
private String name;
private int weight;
public String getName() {
return name;
}
//对外提供相应的set和get方法
public void setName(String name) {
name = name;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
weight = weight;
}
}
经过测试,我们发现,成员变量赋值失败了。也就是说,在修改了 setName() 的方法之后,方法并没有给成员变量赋值,这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏(覆盖),方法中的变量名,无法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题
- this的含义
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
2.5封装优化—构造方法
- 当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效,使用我们自定义的构造方法 - 构造方法的定义格式:
修饰符 构造方法名(参数列表){
// 方法体
}
定义构造方法时注意:方法名与它所在的类名相同,它没有返回值,所以不需要返回值类型,甚至不需要void。使用构造方法后,代码如下:
class Cat{
//成员变量,猫的属性
private String name;
private int weight;
//无参构造
public Cat(){}
//有参构造
public Cat(String name,int weight) {
this.name=name;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
- 注意事项
- 如果你不提供构造方法,系统会给出无参数构造方法。
- 如果你提供了构造方法,系统将不再提供无参数构造方法。
- 构造方法是可以重载的,既可以定义参数,也可以不定义参数
03初识JavaBean
- 什么是JavaBean?
JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。 - 格式:
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}