java 卷一阅读_【读】Java核心技术卷1( 二 )


.out.(args[1]);
}
}
当你在命令行变异运行这个类时:java-hello world
打印结果:
hello
world
第四章 对象与类
类之间的关系
依赖(uses-a) A类方法操纵B类对象,叫做一个类依赖另一个类 。
聚合(has-a) A类的对象包含B类的对象 。
继承(is-a) A类继承B类 。
我们应该尽量减少相互依赖的类存在,如果A类不知道B类,就不会关系B类的变化,这样B类无论怎么变化都不会导致A的bug,软件工程上叫做:让类之间的耦合度最小 。
Java 8中新增类
Date是一个用来表示时间点的Date类,用来表示大家熟悉的日历表示法 。
Date类所提供的日期处理并没有太大的用途 。
1.Date和都不是线程安全的 。
2.Date对日期的计算方式繁琐,月份从0开始 。
创建一个对象可以通过以下几个方式:
= .now();
= .of(2017,10,30);
并不包含时间,你可以通过下面获取年月日:
int year = .();
int month = .();
int day = .();
当然也提供了日期的增减:
.(100);
.(100);
更多方法查看API,这里不做详细表述 。
final实例域
将实例域定义为final,构建对象时必须初始化这个实例域,后面的操作中不能够再对它进行修改 。如:
class {
finalname;
……
}
这个name属性没有方法 。final修饰符大都应用于基本数据类型或不可变的类或对象 。如果类中每个方法都不会改变其对象,那么这个类就是不可变类,如类 。
【java 卷一阅读_【读】Java核心技术卷1】对于可变的类使用final修饰,会对别人造成混乱 。如:
finalsb;
在构造方法中进行初始化
(){
sb = new ();
}
final关键词只是表示存储在sb变量中的对象应用不会再指向其他对象,不过这个对象可以更改:
void (){
sb.( .now() + ": Gold star!");
}
静态域
class {
int sid = 1001;
int id ;
……
}
修饰的常量,是面向类的,即无论存在多少对象,sid只存在一个,所有对象将共享一个sid,但id却和对象同存在,多少个对象就有多少个id 。( 修饰后,它属于类,而不属于任何对象)
静态工厂方法
类似.now和.of都是使用静态工厂方法来构造对象 。
= .();
= .();
x = 0.1;
.out.(.(x)); //输出 $0.10
.out.(.(x)); //输出 10%
为什么不利用构造方法来完成这些操作呢?原因:
无法命名构造器,这里希望得到的货币实例和百分比实例采用不同的名字 。
当使用构造器时,无法改变所构造的对象类型,而方法将返回一个类对象,这是的子类 。
方法参数
方法参数共有两种类型:
基本数据类型
对象类型
一个方法不可能修改一个基本数据类型的参数,如:
x = 10;
harry.(x);
中不论加薪方法具体怎么实现,但x值始终不变 。
2. 对象作为参数其实是对象引用的拷贝,他们指向同一个对象 。
void swap( x, y){
temp = x;
x = y;
y = temp;
}
a = new ("zhang");
b = new ("wang");
swap(a,b); //现在x指向wang,y指向zhang
.out.(a.()+"--"+b.());
最后你会发现a依然是zhang,b依然是wang,因为形参x,y在执行完后被丢弃了,原来的a,b依然指向之前的的对象 。
总结:
java对对象采用的不是引用调用,实际上,对象引用是按值传递的 。
一个方法不能修改一个基本数据类型(数值型和布尔型)
一个方法可以改变一个对象的状态(属性……)
一个方法不能让一个对象参数引用新的对象