7.1类的private成员与public成员
1).private 私有
如果在类的成员声明的前面加上修饰符private,则就无法从该类的外部访问到该类内部的成员,而只能被该类自身访问和修改,而不能被任何其他类,包括该类的子类来获取或引用,因此达到了对数据最高别保护的目的.
2).public 公共
如果在类的成员声明的前面加上修饰符public,则表示该成员可以被所有其他的类所访问.但由于public修饰符会造成安全性和数据封装性的下降,所以一般应减少公共成员的使用.
3).friendly 友元
友元访问控制符可以省略.也就是说在类内声明类成员时,不外加任何访问控制修饰符,则该成员是一个友元.
7.2方法的重载
重载是指相同的方法名称,如果参数个数不同,或者是参数个数相同,但类型不同,则方法就具有不同的功能.
7.3构造方法
1).构造方法的作用与定义
构造方法的名称必须与它所在的类名完全相同.构造方法没有返回值,但在定义构造方法时,构造方法名前不能用修饰符void来修饰,这是因为一个类的构造方法的构造方法的返回值类型就是该类本身.构造方法定义后,创建对象时就会自动调用它,因此构造方法不需要在程序中直接调用,而是在对象产生时自动执行.这一点不同于一般的方法,一般的方法是在需要用到时才调用.
2).默认的构造方法(default constructor)
eg:系统产生默认的构造方法
Cylinder(){ }
3).构造方法的重载
构造方法的重载,可以让用户用不同的参数来构造对象.
4).从一个构造方法调用另一个构造方法
利用这个方法,可缩短程序代码,减少开发程序时间.从某一构造方法内调用另一个构造方法,是通过关键字this来调用的.
在某一构造方法中调用另一构造方法中必须使用this关键字来调用.
5).公共构造方法与私有构造方法
构造方法一般都是共有的(public),而不可以声明为私有的,这是因为它们在创建对象时,是在类的外部被系统自动调用的.
7.4静态成员
1).实例成员
在类定义中如果成员或者成员方法没有用static来修饰,则该成员就是实例成员.
2).静态变量
对于该类的任何一个具体对象而言,静态变量是公共的存储单元,不保存在某个对象实例的内存空间中,而是保存在类的内存空间的公共空间的公共存储单元中.
静态变量在某种程度上与其他语言的全局变量相似,如果不是私有的就可以在类的外部进行访问,此时不需要创建类的实例对象,只需要类名就可以引用.
使用格式:
1) 类名.静态变量名
2) 对象名.静态变量名
3).静态方法
静态方法实质上是属于整个类的方法,而不加static修饰符的方法,是属于某个具体对象的方法.
在静态方法中不能使用this和super.
因为this是代表调用该方法的对象,但现在静态方法既然不需要对象来调用,this也自然不应存在于静态方法的内部.
4).静态初始化器
由static修饰的一对花括号"{ }"括起来的语句组.在类被加载时只执行一次,与创建多少个对象无关.
7.5对象的应用
1)对象的赋值与比较
一般是先用new运算符创建对象,然后再对其进行操作处理.
当参数是基本数据类型时,是传值方式调用,而当参数是引用变量时,则是传址方式调用.
2)引用变量作为方法的返回值
eg:
class Person
{
String name;
int age;
public Person( String name,int age )
{
this.name = name;
this.age = age;
}
public Person compare( Person P ) //返回值类型为对象
{
if(this.age > P.age ) return this; //返回调用该方法的对象
else return P; //返回参数对象
}
}
3).类类型的数组
用数组来存放对象,一般要经过如下两个步骤:
1.声明类类型的数组变量,并用new运算符分配内存空间给数组;
2.用new创建新的对象,分配内存空间给它,并让数组元素指向它.
eg:
public class app7_13
{
public static void main( String[] args )
{
Person Per[]; //声明类类型的数组
Per = new Person[3]; //用new为数组分配内存空间
Per[0] = new Person( "zhangsan", 20 ); //用new运算符创建新对象,并分配给数组元素
Per[1] = new Person( "lisi", 21 );
Per[2] = new Person( "wangwu", 22 );
}
}
4).以对象数组为参数进行方法调用
数组也可以存放对象.因此也可将对象数组作为参数传递到方法里.
public static int min_age( Person p[] )
{
int min = 200;
for( int i = 0; i < p.length; i++ )
if( p[i].age < min )
min = p[i].age;
return min;
}