一、.java源程序与编译型运行区别
二、对象和类
对象:对象是类的一个实例,有状态和行为。
类:类是一个模版,它描述了一类对象的状态和行为。
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后变量自动销毁。局部变量是在栈上分配的。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量是在创建对象的时候初始化。成员变量可以被类中的方法、构造方法和特定类的语句块访问。成员变量是在堆内存的。
类变量:声明在类中,方法体之外,但必须声明为static类型。类变量存在于方法区。
抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被abstract和final修饰。如果一个类中包含抽象方法,那么该类一定要声明为抽象类,否则编译出错。抽象类可以包含抽象方法和非抽象的方法。
抽象方法:抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。抽象方法不能被不能为private,final或者static修饰。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
总结:
1.引用类型总是被分配到“堆”上,不论是成员变量还是局部
2.基础类型总是分配到它所声明的地方:成员变量在堆内存里,局部变量在栈内存里。
三、源文件的声明规则
1.一个源文件中只能有一个public类
2.一个源文件可以有多个非public类
3.源文件的名称应该和public类的类名保持一致
4.如果一个类定义在某个包中,那么package语句应该在源文件的首行
5.如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该放在源文件的最前面
6.import语句和package语句对源文件中定义的所有类都有小。在同一源文件中,不能给不同的类不同的包声明。
四 、访问控制
五、关于StringBuffer和StringBuilder类
StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用的对象。两者之间的区别在于:StringBuilder的方法不是线程安全的,不能同步访问,但StringBuilder相对与StringBuffer有速度优势。
六、构造方法
当一个对象被创建时,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但是构造方法没有返回值。通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。不管你定义与否,所有的类都有构造方法,因为java自动提供了一个默认的构造方法,它把所有成员初始化为0,一旦你定义了自己的构造方法,默认的构造方法就会失效。
七、文件流
获得一个输入流对象来读取文件:
1. 利用文件夹 InputStream f=new FileInputStream("c://test.txt");
2.文件对象 File f=new File("c://hello.txt");
InputStream out=new FileInputStream(f);
3.创建目录
string dirname="/tmp/user/java/bin";
File d=new File(dirname);
d.mkdir();//创建一个文件夹 返回ture/false
d.mkdirs();//创建一个文件夹和它的所有父文件夹。
4.读取目录
public class DirList {
public static void main(String args[]) {
String dirname = "/tmp";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println("目录 " + dirname);
String s[] = f1.list();
for (int i = 0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " 是一个目录");
} else {
System.out.println(s[i] + " 是一个文件");
}
}
} else {
System.out.println(dirname + " 不是一个目录");
}
}
}
5.删除目录java.io.File.delete()
需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
递归思想:
public class DeleteFileDemo {
public static void main(String args[]) {
// 这里修改为自己的测试目录
File folder = new File("/tmp/java/");
deleteFolder(folder);
}
// 删除文件及目录
public static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
deleteFolder(f);
} else {
f.delete();
}
}
}
folder.delete();
}
}
八、异常处理
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
1.检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
2. 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
3.错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
九、接口
接口,在java中是一个抽象类型,是抽象方法的集合,接口通常以interface开声明。
接口和类的相似点:
1.一个接口可以有多个方法
2.接口文件保存在.java.结尾的文件中,文件名使用接口名
3.接口的字节码文件保存在class结尾的文件中
4.接口相应的字节码必须与包名称相匹配的目录结构中
接口与类的区别:
1.接口不能用于实例化
2.接口没有构造函数
3.接口的所有方法必须是抽象方法
4.接口不能包含成员变量,除了static和final变量
5.接口不是被类继承,而是要被类实现
6.接口支持多继承
接口有以下特性:
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。