a)当类的每个对象维护自己一个属性副本时,代表该属性的域又称为一个实例变量,即该尖的每个对象(实例)在内在中有该变量的一个单独实例。
对于有些域,类的每个对象并不需要有该域的一个单独实例,static域就属于这样的情况,称之为类变量,该类的所有对象都共享该类的static域的一个副本;如果一个类的所有对象都需要某个变量的相同副本,则使用static变量;
所以main得声明为static,当执行JVM时,JVM会调用所指定类的main方法,在这时还没有创建该类的任何对象,因此声明其为static,JVM就可以不必创建该类的一对象而调用main了。publicstatic void main(String args[]),执行:javaClassName agrument1 argument2…
JVM加载由ClassName指定的类,并使用这个类名调用main方法;
静态的方法只能调用同一个类中的其他静态方法,且只能直接操纵同一个类里的static域;原因:对象都没有创建,怎么可能调用其他的非静态方法呢!!!
b)字符串连接:”hello”+”there”将创建String “hellotherer”;字符串中所用的基本值会被转化成String,如果一个布尔值与一个String联接,则布尔值将转化成String “true”or “false”,如:
double result = 12.900;“hello ”+ “result”其结果是”hello12.9”后面的0会省略;
所有对象都有一个名为toString()的方法,会返回该对象的String表示形式;
c)重载方法:JAVA允许在一个类中声明几个同名的方法,只要该方法有不同的形参序列(由的数目、排序和类型决定),重载方法是通过签名来区分的,签名是方法名与形参的数目、类型和排序的组合,通过返回类型无法区分方法;
d)构造函数:函数体中使用了this引用,它只能在构造函数体的第一个语句中,如果不是,则会产生语法错误,使用this引用重用了另一个构造函数的初始化代码,而不是在重写类似的代码,这样就使得程序易于维护和修改;
如:
public Time2()
{
this(0,0, 0);
}
public Time2(int h)
{
this(h,0, 0);
}
public Time2(int h, int m, int s)
{
setTime(h,m, s);
}
如果我们要修改类Time2对象的初始化方法,只需要修改大家都调用的那个构造函数即可。
e)枚举类型都是引用类型,可以通过引用指向enum类型对象,其有如下限制:
enum类型隐含为final,因为它们声明的是常量,不能修改;
enum隐含为static;
如果试图用new创建一个enum类型的对象,将引发编译错误;
f)声明为static的方法不能访问非static类成员,因为static方法可能在没有类对象存在的情况下被调用。因此,不能在static方法中使用this引用;this引用必须指向类的某个对象,而当调用static方法时内在中可能还没有该类的对象存在;
g)最小特权原则是良好软件工程的基础:privatefinal static int INCREMENT;
声明一个int类型的final(常量)实例变量INCREMENT,常量可以在声明时初始化,也可以在类的构造函数中初始化;如果是在构造函数中对其初始化,每个构造函数都应该对其进行初始化,如果不是全部对其进行初始化,则会编译出错;
如果final域在声明时初始化,应该将它同时声明为static,这样,一旦它在声明中初始化之后,其值就再也不变了,也就没有必要为每个对象都保留一个副本,static修饰符类的所有对象共享final域;
h)用户只关心有什么功能,而不关心如何实现这些功能;
要想使一个类能被多个应用程序导入,必须将它放在一个包中。
创建可重用类的步骤如下:
1) 声明一个public类,非public的类只能被同一个包中的其他类使用;
2) 为可重用类声明选择包名,并在源代码中添加包声明,每个JAVA源代码文件中只能有一个包声明,而且它必须在所有其他声明和语句之前(注释不是语句,因此可以在包声明之前);
3) 编译类,使得它被放置在相应包的包目录结构中;
4) 将可重用类导入程序,并使用它;
规定:每个包都应以编程者在互联网域名的逆序开头;
我在源文件做如下声明packagecn.gaei.Test;
然后编译:javac–d .Test.java,则在当前目录中就有一个名为cn的目录,后者又有一个名为gaei的目录,gaei目录下有一个名为Test的目录,在Test目录下就可以找到相应的文件Test.class。
如果我们要在其他源文件中引入到此类,则可以通过importcn.gaei.test.Test;把其导入;
i)多态
1、 编译时类型与运行时类型不一致,即会出现多态的情况;
2、 允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换(向上转型),由系统自动完成;因为一个子类是一个特殊的父类,父类的范围比子类宽;
3、 对于属性而言,系统总是访问它编译时类所定义的属性,而对于方法却是呈现出多态性;
4、 引用类型之间的强制转换,只能把一个父类变量转换成子类变量,常用instanceof来判断;
5、 继承要表达的是一种“是(is -a)”的关系;组合要表达的是“有(has-a)”的关系;