JDK = JRE + Java的开发工具(javac.exe,java.exe,javadoc.exe)
JRD = JVM + Java核心类库
cd:打开目录,改变盘符
md:创建目录
rd:删除目录
del:删除文件
cd…:返回上级目录
dir:显示目录
byte 、 short 、char 、int 、枚举类型变量、String类型。
基本数据类型:数据值
引用数据类型:地址值 (含变量的数据类型)
对象的多态性:父类的引用指向子类的对象。
Person p = new Man(); // 左父右子
p.eat();
调用方法时,编译时看左边,运行时看右边。
虚拟方法调用与普通调用:
正常的方法调用:
V1 e = new V1();
e.setz();
Test3 e = new Test3();
e.setz();
虚拟方法调用(多态情况下):
V1 e = new Test3();
e.setz(); //调用Test3类的getInfo()方法
Person p = new Man();
//使用强转符:()
Man m = (Man)p;
//可能ClassCastException异常。
//使用instanceof在进行向下转型前判断。
if(p instanceof Man){
Man m = (Man)p;
}
单例模式:确保一个类只有一个实例,并为整个系统提供一个全局访问点 (向整个系统提供这个实例)。
// 饿汉式单例
public class Singleton1 {
// 指向自己实例的私有静态引用,主动创建
private static Singleton1 singleton1 = new Singleton1();
// 私有的构造方法
private Singleton1(){}
// 以自己实例为返回值的静态的公有方法,静态工厂方法
public static Singleton1 getSingleton1(){
return singleton1;
}
}
// 懒汉式单例
public class Singleton2 {
// 指向自己实例的私有静态引用
private static Singleton2 singleton2;
// 私有的构造方法
private Singleton2(){}
// 以自己实例为返回值的静态的公有方法,静态工厂方法
public static Singleton2 getSingleton2(){
// 被动创建,在真正需要使用时才去创建
if (singleton2 == null) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
相同点:不能实例化,都可以被继承
不同点:抽象类:有构造器。 接口:不能声明构造器
抽象类可以继承一个类和实现多个接口;接口只可以继承一个或多个接口。
在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配。栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
**通过new生成的对象**都存放在堆中,对于堆中的对象**生命周期的管理由Java虚拟机的垃圾回收机制GC进行回收和统一管理**。优点是可以**动态分配内存大小**,缺点是由于动态分配内存导致**存取速度慢**。
是各个线程共享的内存区域,它用于存储class二进制文件,包含了虚拟机加载的类信息、常量(常量池)、静态变量(静态域)、即时编译后的代码等数据。
常量池在编译期间就将一部分数据存放于该区域,包含以final修饰的基本数据类型的常量值、String字符串。
存放类中以static声明的静态成员变量。
当前线程所执行的行号指示器。通过改变计数器的值来确定下一条指令,比如循环,分支,跳转,异常处理,线程恢复等都是依赖计数器来完成。
public class Dog {
Collar c;
String name;
//1. main()方法位于栈上
public static void main(String[] args) {
//2. 在栈上创建引用变量d,但Dog对象尚未存在
Dog d;
//3. 创建新的Dog对象,并将其赋予d引用变量
d = new Dog();
//4. 将引用变量的一个副本传递给go()方法
d.go(d);
}
//5. 将go()方法置于栈上,并将dog参数作为局部变量
void go(Dog dog){
//6. 在堆上创建新的Collar对象,并将其赋予Dog的实例变量
c =new Collar();
}
//7.将setName()添加到栈上,并将dogName参数作为其局部变量
void setName(String dogName){
//8. name的实例对象也引用String对象
name=dogName;
}
//9. 程序执行完成后,setName()将会完成并从栈中清除,此时,局部变量dogName也会消失,尽管它所引用的String仍在堆上
}
Java中的String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。
此外,Java中可以用Pattern类表示正则表达式对象,它提供了丰富的API进行各种正则表达式操作,如:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegExpTest {
public static void main(String[] args) {
String str = "成都市(成华区)(武侯区)(高新区)";
Pattern p = Pattern.compile(".*?(?=\\()");
Matcher m = p.matcher(str);
if(m.find()) {
System.out.println(m.group());
}
}
}
Array和ArrayList的不同点:
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。
当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。
一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。用try来指定一块预防所有”异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的”异常”的类型。
throw语句用来明确地抛出一个”异常”。(写在方法体内)
throws用来标明一个成员函数可能抛出的各种”异常”。(写在函数声明处)
Finally为确保一段代码不管发生什么”异常”都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,”异常“的框架就放到堆栈上面,直到所有的try语句都完成。
如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句。