1、JVM是Java虚拟机,将Java源文件编译为字节码文件。
JRE是运行时环境,包括JVM和Java核心类库
JDK是Java开发工具包,包括JRE和开发工具
2、关键字是Java中具有特殊函数的字段,而标识符则用来命名变量、方法、类
3、Java数据类型分为基本数据类型和引用数据类型
基本数据类型:数值型(整数、浮点数、字符)非数值型(布尔)
引用数据类型:类、接口、数组
4、自动类型转换:小转大,没有数据的丢失
强制类型转换:大转小,有数据的丢失
字符类型在计算时用计算机底层对应的十进制计算:‘A’65 ‘a’97 ‘0’48
byte、short、char类型一般默认被当做int类型,int类型常量也可以自动转换为这三种类型(常量默认是int型)
例子:
byte b = 127;
正确,右边是默认int型,但是可以转换为byter型被左边接收
int a = 127;
byte b = a;
错误,a是int型变量,左边需要为int型或者右边进行一个强制类型转换
char b = ‘a’ + 18;
正确,'a’相当于一个常量,右边是默认int型,但是可以转换为char型被左边接收
char a = ‘a’;
char b = a + 18;
错误,a是char类型,会被当做int型变量进行计算,左边需要为int型或者右边进行一个强制类型转换
5、关系运算符是true和false
逻辑运算符是& | ! ^
6、Random产生随机数
Random r = new Random();
int number = r.nextInt(10);
左闭右开
7、栈内存是方法运行的,存储局部变量,方法使用完就消失
堆内存是new创建的内容(实体、对象、数组等),Java进行回收
8、方法重载:同一个类;相同方法名;参数类型或数量不同(与返回值无关)
9、
10、面向对象和面向过程:面向过程是注重步骤,面向对象则更注重功能
比如:编写一个五子棋程序,面向过程是【棋盘-白子走-绘制图形-判断是否结束-黑子走-…】,而面向对象是【规则系统,黑子和白子行为系统,绘制系统…】
面向过程就像是蛋炒饭,面向对象就像是盖浇饭一样
11、成员变量:在堆内存中;有默认初始值;随对象存在而存在,随对象消失而消失
局部变量:在栈内存中;无默认初始值;随方法存在而存在,随方法消失而消失
12、this关键字解决了局部变量和成员变量的同名问题
方法中加this修饰的是成员变量,this代表的是当前调用方法的引用
13、API是应用程序编程接口,Java API就是JDK提供的各种功能的类,封装起来
14、String类效果上相当于字符数组,底层原理是字节数组
通过new创建的字符串对象,每次new都会申请内存,虽然内容相同·,但是地址不同;直接赋值的话,字符序列相同,JVM只会创建一个String对象
15、StringBuilder中append方法和reverse方法返回的都是对象本身,和String类相互转换:
String s = sb.toString();
StringBuider sb = new StringBuider(s);
16、遍历集合:
for(int i=0;i<array.size();i++){
String s = array.get(i);
sout(s);
}
17、this是子类对象的引用,super是父类对象的引用
18、继承中构造方法的访问特点:
子类中所有构造方法都会访问父类无参构造方法
如果父类没有,则可以通过super显示调用父类带参构造方法;也可以父类创建一个无参构造方法
19、权限修饰符
20、状态修饰符final
修饰成员方法:不能被重写
修饰成员变量:不能被再次赋值,常量
修饰类:不能被继承
21、状态修饰符static
可修饰成员变量和成员方法(无this),属于类
22、
23、封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的getXxx()/setXxx()方法
封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性
24、多态成员访问特点:成员变量:编译和运行都看父类。成员方法:编译看父类,运行看子类
25、多态好处和弊端:
好处:提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有成员
26、多态的转型:
1.向上转型:父类引用指向子类对象。
比如:Animal a = new Cat();
2.向下转型:子类型 对象名 = (子类型)父类引用;
这样就可以访问子类的特有成员了
27、抽象类和接口的区别:
1.成员区别
抽象类:变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口:常量;抽象方法
2.关系区别
类与类:继承,单继承
类与接口:实现,可以单实现,也可以多实现
接口与接口:继承,单继承,多继承
3.设计理念区别
抽象类:对类抽象,包括属性、行为
接口:对行为抽象,主要是行为
第三点是主要区别:
抽象类是用来捕捉子类的通用特性的,而接口则是抽象方法的集合;抽象类不能被实例化,只能被用作子类的超类,是被用来创建继承层级里子类的模板,而接口只是一种形式,接口自身不能做任何事情。
比如说门,门都有开和关这两种行为,属性比如说材质,尺寸等等,这是一类东西,所以是一个抽象类。但是现在要求有一个报警门,就需要安装一个报警器,主要功能是报警,这就是一种行为,需要用接口来实现,这个不是门这个类所必需的!
28、内部类的访问特点
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。
29、匿名内部类
前提:存在一个类或接口。匿名类是局部内部类的一种。
格式:new 类名/接口名{重写方法}
匿名内部类的本质是一个继承了该类的子类匿名对象!用来简化代码。
interface Jumpping {
void jump();
}
class Dog implements Jumpping {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
}
class JumppingOperator {
public void method(Jumpping j) { //new Dog();
j.jump();
}
}
class JumppingDemo {
public static void main(String[] args) {
//需求:创建接口操作类的对象,调用method方法
JumppingOperator jo = new JumppingOperator();
Jumpping j2 = new Dog();
jo.method(j2);
// 匿名内部类的简化
jo.method(new Jumpping() {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
});
}
}
30、int类和String类相互转换的方法
1.int转String
直接在数字后加一个空字符串
通过 String类静态方法valueOf()
2.String转int
先将字符串数字转成 Integer,再调用intValue()方法
Integer i = Integer.valueOf(s);
int x = i.intValue();
通过 Integer静态方法parseInt()进行转换
int y = Integer.parseInt(s);
31、时间类
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
String s = sdf.format(d);
32、
编译时异常和运行时异常的区别
1.编译时异常
都是 Exception类及其子类
必须显示处理,否则程序就会发生错误,无法通过编译(如IO异常和sql异常)
2.运行时异常
都是 RuntimeException类及其子类
无需显示处理,也可以和编译时异常一样处理,一定要修改代码才能解决(如数组下标越界、空指针异常等错误)
编译时异常必须要进行处理,两种处理方案: try…catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
运行时异常可以不处理,出现问题后,需要我们回来修改代码
33、多线程
34、lambda表达式:用来简化匿名内部类的书写
格式:(形式参数) -> {代码块}
例子:
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("多线程程序启动了");
}
}
public class LambdaDemo {
public static void main(String[] args) {
//方式一
MyRunnable my = new MyRunnable();
Thread t = new Thread(my);
t.start();
//方式二
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程程序启动了");
}
}).start();
//方式三
new Thread( () -> {
System.out.println("多线程程序启动了");
} ).start();
}
}
35、注意事项:
使用 Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
省略:
参数类型可以省略。但是有多个参数的情况下,不能只省略一个
如果参数有且仅有一个,那么小括号可以省略
如果代码块的语句只有一条,可以省略大括号和分号,和 return关键字