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
(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基础知识(三)对象数组
- Java科普之基础知识回顾
- 黑马程序员——java基础面向对象基础知识总结
- 黑马程序员——java基础知识之String类和基础数据类型对象包装类
- JAVA基础知识:类 对象 引用
- JAVA面向对象中的基础知识整理-JAVA课堂笔记
- 黑马程序员_java基础知识总结(1)面向对象基础总结
- JAVA --- 面向对象基础知识框架整理
- java基础知识---对象序列化
- Java基础知识-对象初始化
- JAVA核心对象基础知识
- Java基础知识之对象初始化过程
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- java 基础知识总结之 类和对象
- JAVA第一周学习周记:java基础及面向对象基础知识
- 黑马程序员学习log第六篇基础知识:JAVA的面向对象之IO总结
- java基础知识——对象与类
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- JAVA基础知识再学习(2)对象的初始化过程 & 对象的调用过程
- Java 基础知识No.1——Java的类和对象