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

读张孝详《JAVA就业培训指导》一

2015-08-11 13:15 417 查看
1、java虚拟机及java跨平台原理

java源文件编译为.class字节码文件,然后有java虚拟机执行;

java虚拟机分三步:加载字节码文件(class loader),校验字节码文件(溢出、强制转换错误等等),解释执行字节码文件;

2、java垃圾回收机制

java垃圾回收并不是一有垃圾都启动,没有规则,甚至有可能到程序终止都没有启动,这并不是一个很可靠的机制;

3、函数与函数的重载

方法通过指定修饰符、返回值类型、方法名称和任何方法参数在类和结构中声明的。这些部分统称为方法的“签名”;

函数重载overloaded:同一个类中允许同名函数,只要参数个数或者类型不同即可

4、数组

int x[] = new int[100]

java把内存分为两种,一种是栈内存、一种是堆内存

一些基本类型变量和对象的引用变量都是在栈内存中分配

堆内存是存放由new创建的对象和数组,堆内存由垃圾回收器来管理

x就是一个数组的引用变量,x=new int[100],在堆里创建了一个数组对象,为这个数组对象分配了100个整数单元,并将数组对象赋值给了数组引用变量x

x =null 时原来通过new int[100]产生的数组对象不再被任何引用变量所引用,变成了孤儿也就成了垃圾,直到垃圾回收器来将它释放掉

数组的静态初始化:int a[] = {1,2,3,4}或者int a[] = new int[]{3,4,5},声明时不能指定长度,int a[5]错误

多维数组:int[][] xx = {{3,2,7},{1,5},{6}};可以是不规则矩形

5、与数组有关的函数

System.arraycopy;Arrays.sort;Arrays.equals比较数组对象内容是否相等

6、对象

Person p1 = new Person();栈堆同数组

变量在被初始化之前是不能使用的,当一个对象被创建时会对其中各种类型成员变量按照类型自动初始化赋值

判断相等时,句柄指向首地址,equals比较对象内容是否相等

7、垃圾回收

垃圾回收机制启动时会调用finalize方法

强制回收垃圾使用System.gc方法

8、函数的参数传递

基本数据类型的参数传递:形参是局部变量,方法调用结束时就会被释放

引用数据类型的参数传递:对象的引用变量并不是对象本身,只是对象句柄,所以传入时候如果改变对象的值,是会改变的;

9、静态变量:无论是否产生对象或者产生多少对象,某些特定的数据在内存空间只有一份

类的静态成员被称为“类成员”,类属性和类方法

使用静态方法时注意:

方法中不能直接访问非静态成员;方法中不能使用this和super(因为静态方法使用前不需要创建任何对象)

10、静态代码块

当类被载入时静态代码块只被执行一次,常用来进行类属性的初始化

类是第一次被使用的时候才会被装载。

11、单态涉及模式

如果要让类在一个虚拟机中只能产生一个对象,首先必须将类的构造方法的访问权限设置为private,这样就不能用new操作符在类的外部产生类的对象了,但在类内部

让可以产生该类的对象,因为在类的外部开始还无法得到类的对象,只能调用静态方法以返回内部创建的对象,静态方法只能访问静态成员,所以类变量必须定义成静态的

12、内部类

内部类可以直接访问嵌套类的成员包括Private成员,但是内部类成员却不能被嵌套类直接访问;

当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做成第一个类的内部类,程序代码就要容易编写许多。

static内部类很少使用;

内部类如何被外部引用:内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为public即可

Outer outer = new Outer();

outer.Inner inner = outer.new Inner();

inner.do();

方法中定义内部类:方法中定义的内部类只能访问方法中final类型的局部变量,因为final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期

13、使用java文档注释

javadoc -d engineer -version -author engineer.java;-d 说明文件存放目录;enginner目录名 -version要求javadoc加入版本信息;-author要求javadoc加入作者信息

14、override子类重写父类方法

覆盖方法和被覆盖方法具有相同的方法名称、参数列表和返回值类型;

覆盖方法时,子类的访问权限要比父类宽松才行。

15、final关键字

final可声明类、属性和方法;final标记的类不能被继承,final标记的方法不能被子类重写,final标记的变量是常量只能赋值一次;

final标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使用;

将一个形参定义成final也是可以的,这就限定了我们在方法中修改形参的值。

public static final标记的常量,这个常量就成了全局的常量,而且这样定义常量只能在定义时赋值,即使在构造函数里面也不能对其进行赋值。

16、抽象类与接口

抽象类规则:

必须使用abstract关键字修饰,抽象方法也必须用abstract来修饰

抽象类不能被实例化,也即不能new

抽象方法只需声明,不需实现

含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法,然后才能被实例化,否则子类也是抽象类

接口:抽象类中的所有方法都是抽象的,就可以用接口定义

接口是一种特殊的抽象类,接口中只包含常量和方法的定义,而没有变量和方法的实现

实现一个接口要实现所有方法(抽象类除外)。接口中方法都是抽象的

面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用。

含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有 方法,那么,子类也必须定义为抽象类。

接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public abstract 。接口中的变量是全局常量,即public static final修饰的。

看一下他们在语法上的区别吧!

1,抽象类里可以有构造方法,而接口内不能有构造方法。

2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。

4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5,抽象类中可以包含静态方法,接口内不能包含静态方法。

6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。

7,一个类可以实现多个接口,但只能继承一个抽象类。

再补充点两者在应用上的区别:

接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java