一、类的私有成员和公共成员
1、私有成员
(1)场景
限制外部对类中成员的访问;提高安全性
(2)说明
在类的成员声明的前面加上修饰符private,则无法从该类的外部访问到该类内部的成员,而只能被该类的自身访问和修改,而不能被任何其他类(包括其子类)来获取或引用。因此达到了对数据最高级别保护的目的。
2、公共成员
(1)场景
既然在外部无法访问类中的私有成员,那么Java提供了公共成员使得私有成员可以被外界访问。
(3)说明
在类的成员声明的前面加上修饰符public,则表示该成员可以被所有其他的类访问。
例如,使用公共方法来访问私有成员。
class Cylinder{
private double radius;
private int height;
private double pi = 3.14;
public void setCylinder(double r,int h){
if(r>0&&h>0){
radius = r;
height = h;
}else{
System.out.println("数据有错误!");
}
}
......
}
3、缺省访问控制符
(1)对于类成员(成员变量+成员方法)
如果类成员的前面不加任何访问控制符,则该成员具有缺省的访问控制特性,表示这个成员只能被同一包(类库)中的类所访问和调用。
(2)对于类
如果一个类的前面不加任何访问控制符,则这个类具有缺省的访问控制特性,表示这个类只能被同一包(类库)中的类所访问和引用。
二、方法的重载
1、重载的定义
重载是指同一个类内有多个同名方法,但它们的参数列表不同,具有不同的功能。
2、重载的条件
- 同名,但参数个数不同
- 同名,但参数类型不同
- 同名,但多参数类型顺序不同,例如
int sum(int a,int b){...}
和int sum(int b,int a){...}
构不成重载;而int sum(int a,double b){...}
和int sum(double b,int a){...}
可以构成重载。
以上任一条件满足,即可构成重载。
注意:
1、方法的重载根据参数来决定,而不是返回值、修饰符
2、“多参数类型顺序不同”本质上还是参数类型不同,只是有些地方把这一点单独拿出来讲
三、构造方法
1、构造方法的作用和定义
(1)作用
主要作用:在对象被创建时初始化对象的成员
(2)特点
- 构造方法的名称必须和它所在的类的名称完全相同
- 构造方法没有返回值,但不能用void修饰,因为构造方法的返回值类型就是该类本身
- 构造方法在创建对象时自动调用,不需要在程序中调用
2、默认的构造方法
如果类省略掉构造方法,Java编译器会为该类自动生成默认的构造方法,程序在创建对象时会自动调用默认的构造方法。
默认的构造方法没有参数,其方法体中也没有任何代码。
3、构造方法的重载
作用:使用户可以用不同的参数创建对象
4、从一个构造方法调用另一个构造方法
在构造方法中使用this关键字来调用另一个构造方法,并且this必须写在构造方法内的第一行位置。
class Cylinder{
......
public Cylinder(){
this(2.5,5,"红色");
......
}
public Cylinder(double r,int h,String str){
......
}
}
5、公共构造方法和私有构造方法
构造方法一般都是公有的,这是因为它们在创建对象时,在类的外部被系统自动调用。如果一个构造方法被声明为private,则无法在创建对象时被自动调用,但在方法所在的类中还是可以被调用的。
6、注意点
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
四、可变个数的形参
1、介绍
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可
变的实参。
2、应用
(1)JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
(2)JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String … books);
3、说明
- 声明格式:方法名(参数的类型名 …参数名)
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
- 可变参数方法的使用与方法参数部分使用数组是一致的
- 方法的参数部分有可变形参,需要放在形参声明的最后
- 在一个方法的形参位置,最多只能声明一个可变个数形参
五、方法的值传递机制
1、参数分类
方法,必须由其所在类或对象调用才有意义。若方法含有参数:
- 形参:方法声明时的参数
- 实参:方法调用时实际传给形参的参数值
2、Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
- 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
- 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参