core Java 读书笔记 --第4章 对象与类(2)

时间:2014-02-22 09:46:03   收藏:0   阅读:178
2-21:
4.4 静态域与静态方法
4.4.1 静态域
?这个地方搞不懂,要多看看哈。
4.4.2 静态常量
静态常量经常要用到哦!要注意哦!
例子:Math类中定义了一个静态常量:
public class Math
{
...
    public static final double PI=3.14159265358979323846;
...
 
}
在程序中可以采用Math.PI的形式获得这个常量。
如果关键字static没有写,PI就变成了Math类的一个实例域。需要通过Math类的对象访问PI,并且每一个Math对象都有它自己的一份PI拷贝。
 
另一个多次使用的静态常量是System.out。它在System类中声明:
public class System
{
...
public static final PrintStream out = ...;
...
 
}
前面提到过,由于每个类对象都可以对公有域进行修改,所以,最好不要将域设计为public。然而,公有常量(final域)却没有问题。因为out被声明为final,所以
不允许再将其他打印流赋给它:
System.out = new PrintStream(...); //Error--out is final
 
4.4.3 静态方法
静态方法是一种不能向对象实施操作的方法。例如,Math类的pow方法就是一个静态方法。
Math.pow(x,a) 在运算时,不使用任何Math对象。换句话说,没有隐式的参数。
 
4.4.4 Factory方法
这个不太懂,以后再研究
4.4.5 Main方法
需要注意,不需要使用对象调用静态方法。
例如,不需要构造Math类对象就可以调用Math.pow.
不懂,挖个坑~~
 
4.5方法参数
Java程序设计语言总是采用值调用。
也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
例如:考虑下面的调用:
double percent = 10;
harry.raiseSalary(percent);
不必理睬这个方法的具体实现,在方法的调用之后,percent的值还是10。
 
下面再研究一下这种情况。假定一个方法试图将一个参数值增加至3倍:
public static void tripleValue(double x) //doesn‘t work
{
  x=3+x;
}
然后调用这个方法:
double percent = 10;
tripleValue(percent);
可以看到,无论怎么样,调用这个方法之后,percent的值还是10。
 
然而,方法参数共有两种类型:
基本数据类型(数字、布尔值)。
对象引用。
 
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易地利用下面这个方法实现将一个雇员的薪金提高两倍的操作:
public static void tripleSalary(Emplyee x) //works
{
    x.raiseSalary(200);
}
当调用
harry = new Emplyee(...);
tripleSalary(harry);
时,具体的执行过程为:
1)x被初始化为harry值的拷贝,这里是一个对象的引用。
2)raiseSalary方法应用于这个对象引用。x和harry同时引用的哪个Emplyee对象的薪金提高了200%。
3)方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象。
 
特别注意:有些程序员认为Java程序设计语言对对象采用的是引用调用,实际上,这种理解是不对的。
反例:编写一个交换两个雇员对象的方法:
public static void swap(Emplyee x, Employee y) //doesn‘t work
{
     Employee temp = x;
     x=y;
     y=temp;
}
 
Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。
下面总结一下在Java程序设计中,方法参数的使用情况:
一个方法不能修改一个基本数据类型的参数(数值型和布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能实现让对象参数引用一个新的对象。

原文:http://www.cnblogs.com/tyrion1989/p/3560091.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!