类及类的成员
一、类和对象的思想概述
- 类(Class) 和 对象(Object) 是面向对象的核心概念。
- 类是对一类事物的描述,是
抽象的
、概念上的定义 - 对象是
实际存在的
,该类事物的每个个体,因而也称为实例(instance)
。
- 类是对一类事物的描述,是
- ”万事万物皆对象
- 可以理解为:
类 = 抽象概念的人;对象 = 实实在在的某个人
- 面向对象程序设计的重点是 类的设计。
- 类的设计,其实就是 类的成员的设计 。
- 可以理解为:
二、Java 类及类的成员
属性 :对应类中的成员变量
Field = 属性 = 成员变量
行为 :对应类中的成员方法
Method = (成员)方法 = 函数
构造器
构造器的特征
- 它具有与类相同的名称
- 它不声明返回值类型(与声明void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
构造器的作用
创建对象; 给对象进行初始化
构造器语法格式
修饰符 类名 (参数列表) {
初始化语句;
}
注意事项
- 根据参数的不同,构造器可以分为如下两类
- 隐式无参构造器(系统默认提供)
- 显式定义一个或多个构造器(无参、有参)
- java 语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
示例
public class Person { //属性 ,或者成员变量 String name; boolean ismarried; //无参构造器 public Person() { } //带参构造器 public Person(String name,boolean ismarried) { this.name = name; this.ismarried = ismarried; } }
1、类的语法格式
修饰符
class 类名{ 属性声明;
方法声明;
}
举例
public class Person { //属性 ,或者成员变量 String name; boolean ismarried; //无参构造器 public Person() { } //带参构造器 public Person(String name,boolean ismarried) { this.name = name; this.ismarried = ismarried; } //方法 或函数 public void walk() { System.out.println("人走路--------"); } public String display() { return "名字是"+name; } //静态代码块 //在静态代码块中定义必须是静态变量 // static { // name = "satic"; // age = 17; // ismarried = true; // } //实例代码块 { name = "实例"; age = 17; ismarried = true; } int age; //内部类 (不推荐使用) class pet{ } }
2、创建 java 自定义类
步骤:
- 定义类(考虑修饰符、类名)
- 编写类的属性(考虑修饰符、属性类型、属性名、初始值)
- 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
三 、对象的创建和使用
1、Java 类 与对象的关系
-
-
-
类是对象的模板,对象是类的实例
一个类可以创建多个对象,同一个类的不同对象,结构相同,数据不同。
-
类 = 属性 + 方法,(数据+对数据的操作)而属性描述的是状态,方法描述的是行为动作。
2、对象的创建
-
创建对象的语法:
类名 对象名 = new 类名();
-
使用”对象名.对象成员“的方式访问对象成员(包括属性和方法)
3、类的访问机制
-
在一个类中的访问机制 :类中的方法可以直接访问类中的成员变量。
(例外:
static 方法访问非static,编译不通过。
) -
在不同类中的访问机制 :先创建要访问类中对象,在用对象访问类中定义的成员
4、对象的声明周期、及内存解析
待更新 、、、、
5、匿名对象
- 我们也可以不定义对象的句柄,而直接调用这个对象的语法。这样的对象叫做匿名对象
- 如:
new person().shout();
- 如:
- 使用情况
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象 。
- 我们经常讲匿名对象作为实参传递给一个方法调用。
四、属性和方法
1、访问修饰符
java 中,可以使用访问修饰符来保护对类、成员变量、成员方法和构造方法的访问。
Java 支持四种不同的访问权限
friendly (即缺省):在同一包内可见,不使用任何修饰符。适用对象:类、接口、变量、方法。
private :在当前类内可见。适用对象:变量、方法。
注意 :不能修饰外部类
public:对所有类可见。适用对象:类、接口、变量、方法。
protected :对同一包内的类和所有子类可见。适用对象:变量、方法、
注意:不能修饰外部类
子类与基类在相同包中:
被声明为protected的变量、方法和构造器能被同包中的任何其他类访问;
子类与基类在不同包中:
在子类中,子类实例可以访问其从基类继承而来的protected 方法,
而基类实例不能访问的protected方法。
修饰符 当前类 同一包类 子孙类(同一包) 子孙类(不同包) 其他包 public Y Y Y Y Y protected Y Y Y Y/N N friendly Y Y Y N N private Y N N N N
2、属性(field)
属性(变量)的定义:
语法格式
修饰符 数据类型 属性名 = 初始化值 ;
说明1: 修饰符
常用的权限修饰符有:private、缺省、protected、public
其他修饰符:static、final (暂不考虑)
说明2:数据类型
任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
说明3:属性名
属于标识符,符合命名规则和规范即可。
变量的分类
成员变量
- 实例变量(不以static 修饰)
- 类(静态)变量(以static 修饰)
在方法体外,类体内声明的变量称为成员变量。
局部变量
- 形参(方法、构造器中定义的变量)
- 方法局部变量(在方法内定义)
- 代码块局部变量(在代码块内定义)
在方法体内部声明的变量称为局部变量
二者在初始化值方面的异同
- 相同点:都有生命周期
- 不同点:局部变量除形参外,均需显示初始化。
成员变量(属性)和局部变量的区别
成员变量 局部变量 声明的位置 直接声明在类中 方法形参或内部、代码块内、构造器 修饰符 private、public、static、final 不能用权限修饰符修饰、可以用final修饰 初始化值 有默认的初始化值 没有默认初始值、必须显式赋值,方可使用 内存加载位置 堆空间或静态域内 栈空间
3、方法(method)
方法是类或对象行为特征的抽象,用来完成某个功能操作。
将功能封装为方法的目的是,可以实现代码重用,简化代码
Java里的方法不能独立存在,所有的方法必须定义在类里。
方法的声明格式:
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
方法体程序代码
return 返回值;
}
修饰符:public,缺省,private, protected等
返回值类型:
**没有返回值:**void。
有返回值,声明出返回值的类型。与方法体中return返回值”搭配使用
方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”
形参列表:可以包含零个,一个或多个参数。多个参数时,中间用逗号隔开
返回值:方法在执行完毕后返还给调用它的程序的数据。
方法的调用
方法调用过程(本质作用)
执行所调用方法中的代码,方法结束后返回到调用位置执行之后代码
PS:若方法有返回类型,则可以接收返回该类型的数据。参数. (调用过程是将实际参数赋值给形式参数)
实际参数(调用时,使用的参数变量)
形式参数(定义时,声明的参数变量)参数传递(实际参数给形式参数赋值的过程)
值传递(实际参数和形式参数值相同的两个不同变量)
引用传递(实际参数和形式参数指向同-地址的两个变量)
静态的需要使用类来调用
类名.静态变量(类变量)
类名.静态方法()
实例的需要对象来调用
对象.实例变量
对象.实例方法()
对象.静态变量或方法();
语法正确,但不推荐使用