一、了解类和对象
(一)什么是类?
1、类的概述:
对现实生活中某一类具有共同属性和行为事物的抽象(或集合),可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
(属性指该事物的状态信息;行为指该事物能够做什么)
2、类的特点:
(1)、类是对象的数据类型
(2)、类是具有共同属性和行为的一组对象的抽象
(二)什么是对象?
万物皆对象,客观存在的事物皆为对象,对象是指,一类事物的具体体现,
类和对象的关系:
类是对象的集合 (抽象) 对象是类的实现(实体)
(三)什么是面向对象?
面向对象是相对于面向过程来讲的,面向对象方法,指把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
二、类的定义
通常情况下,一个类并不能直接使用,而需要根据类创建一个对象,才能使用。
(1)类是Java程序中的基本组成单位(class关键字修饰的称之为类)
(2)类的组成:属性和行为
属性:在类中通过成员变量(方法之外的变量)来体现
行为:在类中通过成员方法来体现(与之前的方法相比去掉static即可)
(3)类的定义步骤:
1.定义类
格式:public class 类名(){}
2.编写类的成员变量
格式: 数据类型 变量名;
或者 public 数据类型 变量名;
3.编写类的成员方法
格式: public 返回值类型 方法名(参数){}
三、对象的使用
先有类再有对象,对象的创建也要通过类
1.导包: 指出所需要使用的类在什么位置;
对于和当前类属于同一个包的情况,可以省略导报语句不写
格式: import 包名.类名
2.创建对象:
格式: 类名 对象名=new 类名();
范例:Car c=new Car();
3.使用对象(就是使用成员变量和成员方法):
(1).使用成员变量(赋值和修改):
格式:对象名.成员变量名;
范例:c.price;
(2).使用成员方法:
格式:对象名.成员方法名();
范例:c.run();
注意:
当一个对象作为参数传递到方法当中时,实际上传进去的是对象的地址值。
四、成员变量和局部变量
区别:
(1)定义的位置不一样:
局部变量:定义在方法的内部或者方法的声明上(形参)
成员变量:在方法的外部定义,直接写在类中的
(2)作用范围不一样:
局部变量:只有方法中才可以使用,出了方法就不可使用了。
成员变量:整个类全部都可以用
(3)默认值不一样:
局部变量:没有默认值,没必须先定义,赋值,再使用(想使用必须初始化)
成员变量:有默认值,规则和数组一样,系统默认分配
(4)内存的位置不一样:
局部变量:栈内存
成员变量:堆内存
(5)生命周期不一样:
局部变量:随方法的创建而创建,随方法的消失而消失
成员变量:随对象的创建而创建,随对象的消失而消失
五、封装性
(1)this关键字
在类中有:
- this修饰的变量指成员变量
- 局部变量如果与成员变量同名,不带this修饰就是局部变量
- 局部变量如果不与变量名同名,不带this修饰就是成员变量
- this表示所在类的对象
也即是说,当方法的局部变量和类的成员变量重名时,根据“就近原则”,会优先使用局部变量,如果要访问本类中的成员变量,那么就需要使用格式:this.成员变量名
注意:
当局部变量隐藏成员变量时使用this
当局部变量和成员变量同名时使用this
(2)private关键字
1.什么是private关键字
- 是一个权限修饰符
- 可以修饰成员变量和成员方法
- 作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问(private修饰的 只能当前类使用)
2.被private修饰的成员变量,在本类中仍然可以随意访问,但如果要被别的类使用,就要提供相应的操作
- 提供get变量名()方法,用于获取成员变量的值,用public修饰
- 提供set变量名()方法,用于设置成员变量的值,用public修饰
(3)封装
1.封装概述:
概述:封装是面向对象的三大特征之一(封装,继承,多态)
作用:隐藏类中的内部细节,外界无法直接调用(private)
2.封装的原则:
- 将类的某些信息隐藏在类内部,不允许外界直接调用,而是通过该类提
- 供的方法实现对隐藏信息的操作和访问(get、set)
- private私有化成员变量,提供了对应的get/set方法
3.封装的优点:
- 通过方法控制成员变量,提高了代码的安全性
- 把代码进行封装,提高了代码的复用性
六、构造方法
(1).概述:
构造方法是一个特殊的方法,专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用的构造方法。
(2)作用:
创建对象
(3).格式:
public class 类名{
public 类名(参数类型 参数名){
方法体
}
}
(4).注意事项
- 构造方法的名称必须和所在的类的名称 完全一样 ,就连大小写也要一样
- 构造方法不要写返回值类型,连void都不要写
- 构造方法不能return一个具体的返回值
- 如果没有定义构造方法,类中将会自动定义一个默认的无参构造
- 如果定义了至少一个构造方法,类中将不会自动定义一个默认的无参构造方法
- 构造方法可以重载
(5).构造方法的重载
如果已经定义了有参构造方法,还要使用无参构造方法,则必须在写一个无参构造方法