类和对象

来源:互联网 发布:mysql null的逻辑 编辑:程序博客网 时间:2024/05/20 17:28
重点:
  • 定义类和创建对象
  • 方法及方法重载
  • 构造方法及重载
  • 包的使用
  • 访问修饰符
难点:
  • 方法重载
  • 封装的原理

1.1类与对象
1.1.1面向对象
Java语言是一种面向对象的语言。要使用Java进行面向对象的编程,首先要建立面向对象的思想。
1.1.2对象
对象是用来描述客观事物的一个实体。
1.1.3类
类是具有相同属性和方法的一组对象的集合。
类和对象的关系及如同模具和用这个模具制作出来的物品的关系。
1.2定义类
面向对象设计的过程就是抽象的过程,一般分3步来完成。
  1. 发现类,类定义了对象将会拥有的特征(属性)和行为(方法)。
  2. 发现类的属性,对象所拥有的静态特征在类中表示是称为类的属性。
  3. 发现类的方法,对象执行的操作称为类的方法。
1.2.1定义类
语法:
[访问修饰符] class 类名{
     //省略类的内部具体代码
}
  • 访问修饰符如public、private是可选的。
  • class是声明类的关键字。
  • 按照命名规范,类名首字母大写。
1.2.2属性
Java中类的内部主要包含属性和方法。对象所拥有的特征在类中表示时,称为类的属性
语法:
[访问修饰符] 数据类型 属性名;
  • 访问修饰符是可选的。
  • 除了访问修饰符之外,其他的语法和声明变量是一致的。
1.2.3方法
对象执行的操作的行为称为类的方法。
语法:
[访问修饰符] 返回类型 方法名(参数类型 参数名1,参数类型 参数名2,……){
     //……省略方法体代码
}
  • 返回类型可以是void,表明没有返回值,不为void,方法体中一定要使用"return"关键字返回对应类型的结果,否则程序会有编译错误。
  • 小括号中的称为参数列表。
1.3创建和使用对象
1.3.1创建对象
类是一类事物的集合和抽象,代表这类事物共有的属性和行为。一个对象就称为类的一个实例,是类一次实例化的结果。
例如:
"张三"是一个"人"类的对象。
类的对象可以调用类中的成员,如属性和方法等。
语法:
类名 对象名=new 类名();
1.3.2使用对象
在Java中,要引用对象的属性和方法,需要使用"."
语法:
对象名.属性;
对象名.方法名();
补充知识:对象数组
用类创建的数组
例:
是用一个类中的有参构造方法创建对象数组
Person[] person={new Person(22,"韩冰"),new Person(23,"刘顿")};

2.1成员方法
类成员主要包含两部分:成员方法和成员变量。
2.1.1带参数的方法
带参数的方法可以接受用户输入的内容。创建方法时定义的参数叫做形式参数,简称形参。调用方法是传入的参数叫做实际参数,简称实参
2.1.2方法重载
特点:
  1. 在同一类中。
  2. 方法名相同。
  3. 参数的个数或类型不同。
优点:方法重载其实是对一般方法的一种升级, 可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,只要记住一个方法名即可。

2.2成员变量
1.成员变量作用域
  • 类中的属性,也就是直接在类中定义的变量,称作成员变量,它定义在方法的外部。
  • 成员变量可以在声明时赋初始值。
2.局部变量作用域
  • 局部变量就是定义在方法中的变量。
  • 虽然成员变量age和局部变量age的名称是一样的,但是表示的却不是同一个变量。一般情况下,局部变量在使用前需要赋值,否则会编译出错。
3.成员变量和局部变量的区别
  • 作用域不同。局部变量的作用域仅限于定义它的方法,在该方法外无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都是可以使用它,如果访问权限允许,还可以在类的外部使用成员变量。
  • 初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它一个默认值,基本数据类型的值为0,引用类型的值为null。但是Java不会给局部变量赋予初始值,因此局部变量必须要定义赋值后再使用。
  • 在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。
  • 局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
4.在Java中,变量的类型可分为两种:一种是前面章节中学习过的基本数据类型,还有一种数据类型叫做引用数据类型
Java中的引用数据类型包括3种:类、数组和接口
补充知识:
基本数据类型和引用数据类型内存分配和传参区别
  • 对于基本数据类型,不同的变量会分配不同的储存空间,并且储存空间中储存的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另外一个变量的值。
  • 对于引用数据类型,赋值是把原对象的引用(可理解为内存地址)传递给另一个引用。对数组而言,当一个数组名直接该另一个数组名赋值时,相当于传递了一个引用,此时,这两个引用指向同一个数组,也就是指向同一内存空间。
  • 同理,基本数据类型和引用数据类型在传递参数时,同样会有这样的区别。
2.3构造方法
Java中,当类创建一个对象时,会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法
2.3.1构造方法的定义
构造方法的主要作用是进行一些数据的初始化
语法:
[访问修饰符] 方法名 ([参数列表]){
    //……省略方法体的代码
}
在语法中:
  • 构造方法没有返回值。
  • 默认构造方法没有参数,因此参数列表可选。
  • 构造方法的方法名与类名相同。
  • 当开发人员没有编写自定义构造方法,Java会自动添加默认构造方法。默认构造方法没有参数。如果自定义了一个或多个构造方法,那么Java不会自动添加默认构造方法。
2.3.2构造方法的重载
前面学习了方法重载,构造方法同样也可以重载,即在同一个类中可以定义多个重载的构造方法。
补充知识:
  • this的用法:this关键字是对一个对象的默认引用。每个实例方法内部,都有一个this引用变量,指向调用这个方法的对象。因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法。this不能调用类变量和类方法,this也不能调用局部变量。
3.1封装概述
 Java中,封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。封装反映了事务的相对独立性,有效避免了外部错误对此对象的影响,并且能对于对象使用者由于大意产生的错误操起到预防作用。同样面向对象编程提倡对象之间实现松耦合关系。封装的好处主要有隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。
松耦合就是指尽量减少对象之间的关联性,以降低它们之间的复杂性和依赖性。
3.2封装的步骤
1.修改属性的可见性
例:将Person类中的属性由public修改为private即可。
2.设置setter/getter()方法
可以手动调加,也可以使用快捷键由系统添加。
3.设置属性的存取限制
此时,属性仍然没有限制作用,需要进一步利用条件判断语句进行限制。
例如:在setter方法用if语句限制性别输入错误。
4.1包的作用
Java中包机制也是封装的一种形式。
包主要有以下3个方面的作用。
  1. 包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。
  2. 防止命名冲突:Java中只有在不同包中的类才能重名。
  3. 包允许在更广的范围内保护类、数据和方法,可以在包中内定义类。根据规则,包外的代码由可能不能访问该类。
4.2包的定义
语法:
package 包名
5.1类和类成员的访问控制
包实际上是一种访问控制机制,通过包来限制和制约类之间的访问关系。访问修饰符也同样可以限制和制约类之间的访问关系。
5.1.1类的访问修饰符
 同一包中 非同一包中public 可以使用可以使用默认修饰符 可以使用不可以使用

5.1.2类成员的访问修饰符

同一类中同一包中子类中其他地方private可以使用 不可以使用不可以使用不可以使用默认修饰符可以使用 可以使用 不可以使用不可以使用protected可以使用 可以使用 可以使用 不可以使用public可以使用 可以使用 可以使用 可以使用 

5.2static关键字
一个类可以被创建n个对象。如果n个对象中的某些数据需要共同使用,就需要使用static关键字修饰这些数据。Java中,一般情况下调用类的成员都需要先创建类的对象,然后通过对象进行调用。使用static关键字可以通过类名加"."直接调用类的成员,不需要创建类的对象。使用static修饰的属性和方法属于类,不属于具体的某个对象。
1.static关键字的修饰属性
static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。在实际开发中,static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。使用final关键字修饰常量在整个程序运行时都不能被改变,和具体的对象没有关系,因此使用static修饰,如"static final int PERSON_LIVE=1;"
  • 常量名一般由大写字母组成。
  • 声明常量时一定要赋初值。
2.static关键字的修饰方法
static修饰的方法称为静态方法或者类方法,不用static关键字修饰的方法称为实例方法。
  • 在静态方法中不能直接访问实例变量和实例方法。
  • 在实例方法中可以直接调用类中定义的静态变量和静态方法。

总结
  • 了解了类和对象,也学习了如何定义类、创建对象和使用对象。
  • 面向对象的优点:与人的思维习惯一致,封装使信息隐藏,提高了程序的可维护性和安全性,一个类可以创建多个对象实例,体现了重用性。
  • 对象是用来描述客观事物的一个实体,由一组属性和方法构成。
  • 类具有相同属性和方法的一组对象的集合。
  • 使用类的步骤是,使用class定义类、使用new关键字创建类的对象、使用"."访问类的属性和方法。
  • 如果一个类中包含了两个或两个以上方法。它们的方法名相同,方法参数列表不同,则称为方法的重载。
  • 构造方法用于创建类的对象。构造方法的作用主要就是在创建对象时执行一些初始化操作。可以通过构造方法重载来实现多种初始化行为。
  • 封装的好处主要有隐藏的实现细节;让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。
  • Java中提供包来管理类。创建包使用关键字package,导入包中使用关键字import。
  • Java中包含类的访问修饰符和类成员的访问修饰符,其作用域是不同的。
  • static关键字修饰的属性和方法,不属于具体的对象,采用类名加"."方法即可直接访问。