您的位置:首页 > 编程语言 > Java开发

Java 类对象基础知识--科普

2014-07-20 23:42 288 查看
(1)类:蓝图和模板。Java中所有的类都源于Onject类
(2)类与类之间的关系
依赖(use-a):类A方法中使用了另外一个类B对象b,则类A依赖于类B
聚合(has-a):类A的对象包含类B的的对象
继承(is-a):承上,扩展
(3)注意对象与对象变量之间的区别
Date bir = new Date();
bir 是对象变量,而newDate()实在jvm堆中创建一个Date对象。当对象变量没有指向任何对象引用
时候(或者对象指向null的时候),不能调用调用方法。如下例子:
Date deadline;//deadlinedoesn't refer to any object
String s = deadline.toString();//error
编译器将会报错,因为deadline没有指向任何对象。一个对象变量并没有实际包含一个对象,而是仅仅
引用一个对象。在Java中任何对象变量的值都是对存储在另外一个地方的一个对象的引用。New操作
符的返回值也是一个引用。
局部变量不会自动地初始化为null,必须通过调用new(创建对象)或者设置为null进行初始化(在
Java中,null值表示引用不指向任何对象)
(4)在Java中源文件名必须和public类名的名字相匹配。在一个源文件中只有一个public类,任意多个
非public类。
(5)可以这么认为Java编译器内置了Unix的make功能
(6)不要编写返回可变对象引用的方法。这会破坏封装行,使得外部有机会更改内部对象
class Emloyee{
private Date hireDate;
public Date getHireDay(){
return hireDate;
}
}
上面这个类破坏了封装性,使得外部类可以获得内部对象hireDate的引用,从而改变其值。
Emloyee harry = ....;
Date d = harry. GetHireDay();
d.setTime(**^*^*(*^);
此时d和harry引用了同一个对象,外部的类可以更改其值,破坏了封装性。
如果需要返回一个可变对象(mutable)的引用,应该首先对它进行克隆(colone)。对象克隆是指存
放在另外一个位置上的副本
(7)如果一个对象的实例域为final,构建对象时必须初始化这样的实例域。即final的实例域必须在构造方
法执行后被初始化,并且初始化之后不能被修改。final大多应用于基本类型域和不可变(immutable)类
的域(如String类)
(8)静态域和静态方法
静态域:如果在类中的域定义为static,则该域属于整个类的,所有该类的实例共享该域
静态常量:由final和static共同修饰的域,静态常量用的还是比较多的,比如如下例子
public class Math{
….
public static final doublePI=3.1415926;
}
静态方法:可以认为静态方法是没有this参数的方法,因为静态方法不能操作对象,所以不能在静态方
法中访问实例域,因为实例域属于对象/实例,静态方法可以访问自身类中的静态域。静态方法可以两
种方法调用:类名.方法名和对象名.方法名,但是建议用前者。静态方法一种常见的用途:用于工厂方
法(例子相见参考书籍p118页)。main方法就是个static方法,该方法不对任何对象进行操作,事实
上在程序启动时还没有任何对象,静态的main方法将执行并创建程序所需要的对象
(9)
Java中的方法参数总是按值调用,方法得到的总是参数数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容
(10)
重载解析(overloadingresolution):编译器匹配函数参数类型和个数的过程。
(11)
类中的域如果没有在构造函数中显示的赋予初值,那么类会赋予域默认初值:数值型为0,布尔型为false,对象引用变量为null(局部变量不会,只有类域有默认的初值)
如果不管调用什么构造函数,都想要执行相同的赋值操作,则可以在类中这样设计(这是一个好的设计习惯)。如下两种方式
class A{
private String name=”I Love You”;
…..
}
class B{
private String name=getName();
…..
}
一个类中,有多个构造器,而且构造器之间可以相互调用,调用形式为this(...).
Class C{
public C(){
….
String s =”swenskfgv”;
this(s);
}
public C(String s){

}
}
初始化数据域还有第三种方法:初始化快(initializationblock)
class D{
private int x;
private string str;
private Date date;
//object inialization block
{
x=100;
str=””;
date=null;
}
}
(12)调用构造器的处理步骤
所有数据都初始化为默认值
按照类声明中出现的次序,一次执行所有域初始化语句和初始化块
如果构造器第一行调用了第二个构造器,则先执行第二个构造器主体
再执行本构造器主题
(13)对于静态域可以采用两种方式初始话
private static int nextId = 1
static {
Random generator = new Random();
nextId = generator.nextInt(10000);
}
所有静态初始化语句以及静态初始化快都将依照类定义的顺序执行
(14)package的作用:一、方便组织管理自己的代码,二、确保类名的唯一性。
一个类可以使用同一包中的所有类。在包中定位类是编译器(compiler)的工作。类文件中的字节码使用完整的报名来引用其他类
如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认的包中(defaultpackage)。默认包是一个没有名字的包
参考文献

《Java核心技术》卷一Cay
S.Horstmann Gary Cornell等著机械工业出版社
http://blog.sina.com.cn/s/blog_5ceb10ad0100y39u.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java类对象