访问控制符:
类的访问控制符有四种:
public private protected和默认(即变量或方法前不添加访问控制符)
在一个类的内部 所有成员可以相互访问,访问控制符是透明的;
访问控制符是针对外部访问而言的
在一个类的外部 通过 类对象名.私有成员名 的方式无法访问该对象中的私有成员,但可以访问保护成员和公有成员。
下面举一个例子
例1:
class asd1 {
private int a, b, c; //2行
// 设置三边长度
public void setTriangle(int i, int j, int k) { //5行
a = i;
b = j;
c = k;
} //8行
// 求周长
public int zhouchang() {
return (a + b + c);
}
// 求面积
public double area() {
double p = 1.0 * (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}
public class asd {
public static void main(String[] args) {
asd1 t = new asd1();
// t.a = 3; //31行
// t.b = 4; //32行
// t.c = 5; //33行
t.setTriangle(3, 4, 5); //34行
System.out.printf("三角形的面积是: %f\n", t.area());
System.out.printf("三角形的周尝试: %d\n", t.zhouchang());
}
}
在命令行窗口下输出结果为:
给外部的变量赋值,可以使用想31、32、33行那样,也可以使用像5行到8行和34行那样,但是一般推荐使用后者,因为后者不会直接的改变变量的值,使得程序本身更加安全
在本程序中,因为第2行的三个变量是私有的,所以不可以进行像第31、32、33行那里那样给变量赋值,若要进行这样的赋值,需把2行的变量类型前边的private去掉
在这4个访问控制符中,一般public和private使用比较多,所以主要说这个
再举一个例子
例2;
class A
{
public int i = 10;
private int j = 20;
public void f()
{
i = j = 111;
g();
}
private void g()
{
j = i = 222;
f();
}
}
public class asd
{
public static void main(String[] args)
{
A a = new A();
a.i = 0; //24行
//a.j = 0; //25行
// a.f(); //26行
//a.g(); //27行
System.out.println("2014年5月15日09:41:44");
}
}
输出结果为:
2014年5月15日09:41:44
本程序的结果并没有什么实际意义,下面将会通过这个程序说明一下public和private两个访问控制符的使用
由上面的代码可以知晓,本程序定义了一个public的int型变量,一个private的int型变量,一个public的方法,还有一个private的方法,
首先要说的是,在f()和g()方法内部可以随意使用i和j,因为它们同属于一个类中,而23行是没有错的,因为i是public的26行本身也没有错误,但是如果去掉前面的注释会报错,这是因为f()方法中有g(),而g()方法中也有f(),这就形成了间接递归(关于递归,会在数据结构中说的,这里不多说)
而25行27行会报错,因为j和g()方法都是private的
【所有代码均在windows系统下eclipse环境JDK 1.7下运行通过】
(如有错误,敬请指正)