最近想看看书,了解一下java的基本概念,其实以前也看过,但是囫囵吞枣,实在有愧.然而温故以知新,学习本应就是理解深化的过程.
主要看的书是《Java 2 参考大全》和《Java 2 核心技术:原理》
Java基本概念
一.字符类型
主要重温了一下各种字符类型占据的字节数。
short 短整型 16位 2字节
int 整型 32位 4字节
long 长整型 64位 8字节
浮点分单精度float和双精度double
float 单精度 32位 4字节
double双精度 64位 8字节
char 这一点比较特殊,java使用的不是ascii字符,也不是扩展的8位字符集,而是unicode字符集,unicode字符占据16位,2字节,可以表示人类所有发现的字符,也因为如此java可以比较方便的进行国际化,不知这个理解有无问题。
实际上char的值是个整数(0-65536),因此我们给char赋值可以用整数或者用单引号括起来的字符
顺便就看了一下UTF(unicode text format)格式,它是这样出来16位的unicode字符
前九位为0的unicode字符:一个字节
前五位为0的unicode字符:两个字节
其它:三个字节
对应的前缀编码:
0xxxxxxx Ascii码
10xxxxxx 第二或者第三个字节
110xxxxx 两字节序列中的第一个字节
1110xxxx 三字节序列中的第一个字节
二.类
类与对象:类是一个逻辑结构,对象拥有物理实体.也就是说类不占据内存空间,对象占据一定的内存空间.可以从类对象的获取说明这个问题。
Box aBox=new Box();
实际上这个过程分两步
Box aBox;
aBox=new Box();
第一步是创建一个对象,返回的aBox是一个对象的引用。
第二步才是调用构造函数,为对象分配内存空间,返回的是这个内存地址的引用,这个引用被赋给了aBox。
构造函数是如何工作的呢?
构造函数没有返回值,是因为其隐含的返回类型是类本身。
默认的构造函数自动将所有的实例变量初始化为0。
实例变量即是一个类中定义的数据或变量,类的成员是指类中定义的方法和变量。
引用是个很有意思的东西。
Box a=new Box();
Box b=new Box();
这个时候a和b对应各自的内存地址,如果
a=b;
这个时候a,b均指向同一个内存地址即b的内存地址。也就是说现在你更改a中的成员变量的值b的变量的值也随之改变;如果改变b中成员变量的值,a的对应变量也随之改变。引用只是一个内存的地址。
类中有个词语叫做抽象类,抽象类有很多含义和细节需要注意:
1。包含抽象方法的类必须声明为抽象类
2。抽象类的方法在子类中必须被覆盖,否则子类也必须声明为抽象类
3。抽象类不能有对象,不能new一个抽象类将其实例化
4。抽象类可以有抽象方法也可以有具体实现了的方法
5。抽象类可以创建对象引用
第五条非常有用,可以实现多态。李乾师兄曾讲解的设计模式中的工厂方法也就是抽象类的超类变量引用不同的子类对象。
由于接口都没有实现自身的方法,如果一个类没有实现接口中的方法,也必须定义为抽象类。
三.接口
接口只定义方法名,但是不实现方法。
接口可以声明变量,但是这些变量将是隐含的、最终的、静态的,不能由实现接口的类来改变。因此可以将共享常量在接口中定义,然后导入到多个类中。
可以使用接口引用来调用实现,这是什么意思呢?
inerface callback()
{
public void call(int p)
{
}
}
class client implements callback
{
public void call(int p)
{
}
}
public static void (String arg[])
{
<b>callback c=new client();</b>
c.call(1);
}
注意上面黑体字部分callback c=new client(), 创建了一个client对象,却声明为接口类型,这其中的意思就是c只是知道接口callback中方法,至于实现这个接口的client类还有什么其它的方法,c一概不知。这有些类似超类引用子类对象,很有用处的地方就是实现多态,很多实现这个接口的类可以用同一个接口的引用来调用。
四. 访问控制
五. 一些保留字的含义和运用
static:一般修饰类的成员,使该类成员独立于类的任何对象,使用类名即可调用。
使用static要注意:
1.static 方法仅可调用其它的static方法
2.只能访问static数据
3.不能以任何方式调用this或者super。(还不明白为什么)
this:在任何方法中都可以使用this来调用当前的对象,this总是当前对象的一个引用。
this可以用于实例变量隐藏
所谓实例变量隐藏,就是说当一个本地变量和一个实例变量同名时,实例变量就被隐藏了。比如Box的构造函数
Box( double aWidth,double aHeight , double aDepth )
{
width=aWidth;
height=aHeight ;
depth=aDepth;
}
如果这时候参数是 width,height,depth,则这些本地的变量就会和类的成员变量同名,这时候就会发生实例变量被隐藏的现象。但是this可以避免这种情况。
Box( double width,double height , double depth )
{
this.width=width;
this.height=height ;
this.depth=depth;
}
this直接引用对象,可以解决名字空间的问题,即本地变量和类的实例变量同名的问题。(这个需要再想想)
super:主要有两种用法
1。super(parameter_list)调用超类的构造函数,但是这必须是子类构造函数的第一条语句。这里有趣的事情是子类构造函数调用超类构造函数时,过程是怎么样的;实际上是按照类的派生顺序调用构造函数。
2。super.member 这时候作为超类对象的引用调用超类的方法或者实例变量
final:可修饰变量,方法和类。
final 变量:变量的内容不能被修改
final 方法:方法不能被重载
final 类 :类不能被继承