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

(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编译器内置了Unixmake功能

6)不要编写返回可变对象引用的方法。这会破坏封装行,使得外部有机会更改内部对象

class Emloyee{

private Date hireDate;

public Date getHireDay(){

return hireDate;

}

}

上面这个类破坏了封装性,使得外部类可以获得内部对象hireDate的引用,从而改变其值。

Emloyee harry = ....;

Date d = harry. GetHireDay();

d.setTime(**^*^*(*^);

此时dharry引用了同一个对象,外部的类可以更改其值,破坏了封装性。

如果需要返回一个可变对象(mutable)的引用,应该首先对它进行克隆(colone)。对象克隆是指存 放在另外一个位置上的副本

7)如果一个对象的实例域为final,构建对象时必须初始化这样的实例域。即final的实例域必须在构造方 法执行后被初始化,并且初始化之后不能被修改。final大多应用于基本类型域和不可变(immutable) 的域(如String类)

8)静态域和静态方法

静态域:如果在类中的域定义为static,则该域属于整个类的,所有该类的实例共享该域

静态常量:由finalstatic共同修饰的域,静态常量用的还是比较多的,比如如下例子

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);

}

所有静态初始化语句以及静态初始化快都将依照类定义的顺序执行

14package的作用:一、方便组织管理自己的代码,二、确保类名的唯一性。

一个类可以使用同一包中的所有类。在包中定位类是编译器(compiler)的工作。类文件中的字节码使用完整的报名来引用其他类

如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认的包中(defaultpackage)。默认包是一个没有名字的包

参考文献

Java核心技术》卷一Cay S.Horstmann Gary Cornell等著机械工业出版社

http://blog.sina.com.cn/s/blog_5ceb10ad0100y39u.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值