Idea(快捷键)
{1.ctrl+alt+l 代码格式化
2.ctrl+alt+v 自动生成数据类型
3.alt+7 类方法结构
4.alt+enter 代码提示
5.alt+insert set get 构造方法等
6.ctrl+alt+b 导航到方法实现
7.ctrl+d 复制上一行的代码
8.ctrl+y 删除整行
9. Ctrl+Shift+↑/↓ 移动整行
}
1.JDK包含 jre 和 开发工具 ;jre包含 JVM(跨平台)和核心类库
2.关键字是被Java赋予特殊含义的单词 关键字全部是小写的 在代码编辑器中会有特殊的颜色提醒
3.null空常量是无法直接输出的
4.小驼峰命名法 适合方法和变量;大驼峰命名法适合类
5.自动 类型转换是小转大 强制类型转换是大转小
6.字符进行+运算 取得是字符的asck||码
7.int + double = double char + int = int
8.i++ 先赋值在自增 ++i 先自增在赋值
9.for语句和while语句的区别是 变量i在for循环后无法再使用 而在whlie循环后可以再使用
10.栈是存储 零时变量的 堆是存储 实体(new出来的东西) 和 对象 成员变量存储在堆内存中 局部变量存储在栈内存中
11.重载 是 方法在同一个类中 方法的方法名相同 参数的类型个数不同 (如何判断与返回值无关 主要看方法名和参数)
12.对于基础数据类型的参数,形参的改变不影响实际参数的值
3.引用类型的参数,形式参数的改变,影响实际参数的值
14.this 是解决局部变量隐藏成员变量 方法被那个对象 调用this就代表那个对象
15.使用 = = 做比较 基础类型比较的是 数据值 是否相同 引用类型比较的是地址值是否相同
16.string 和 stringbuilder的区别 前者是可变的 后者是不可变的
17.stringbuilder 里面的append方法 和 reverse方法
18.stringbuilder 和 string 相互转化 利用 tostring 方法 和 stringbuilder 的构造方法
19.arrayList add 和 get remove
20.继承的弊端 增加了耦合性 当父类改变时 子类不得不改变
21.在实例子类时会访问父类的无参构造方法(因为子类实例时可能会用到父类的数据,子类的构造方法默认第一句是 super() static 静态代码块是优先于 构造方法执行的
22.现在子类寻找方法 如果没有找到就到父类找
23.权限修饰符:
24.static 修饰符 被类的所有对象所共享 可以通过对象来调用 也可以通过类名调用
25.接口的成员是 默认被public static final 修饰的 接口本身也是被static修饰的所以成员可以通过类名直接引用
26.接口是没有构造方法的
27.string.valueof() 将其他类型转化为string类型
28.simpleDataFormat format() yyyy-MM-dd HH:mm:ss
29.集合分为collection和map c是单列 底下还有 list(可重复)[Arraylist,LinkList] 和 set(不可重复)[HashSet,TreeSet]
M是双列集合以键值对的形式来存储数据 底下主要比较常用到的是HashMap(HashMap是线程不安全的)。
30.当使用迭代器遍历List列表期间不能对列表进行添加、修改等改变列表的操作否则会出现并发修改异常,可以使用ListIterator来进行上述操作而不会出错。
31.arrayList 底层是数组 查询快 增删慢 LinkList底层是链表 增删快 查询慢.
32.哈希值是jdk根据对象的地址或字符来生成的一个int类型的数值。
33.哈希表是一种数组加链表的实现方法 元素哈希值mod16存入相应的位置如果位置上已经有元素则比对元素哈希值再来比对元素内容
34.泛型 是你定义一个东西但是你不知道你将来要传入的实参是什么 所以泛型可以当你传入形参时再来确定你所需要的类型数据
泛型类的定义是在类名后面加入<T> T可为任意数字。
泛型方法是在void前面加<T>
35.可变参数方法 public void sum (int ... a){}其中格式只是将多个参数a封装成相对应的对象数组
36.file 类封装的并不是一个真正的文件而仅仅只是文件名或者是路径名 但最终都会变成具体的文件实现
37.字节流和字符流 当字节流取到一个字节时就会转向成相应的字符 但是在处理汉字的时候 一个汉字是有两到三个字节组成的所以在转换的时候会出现乱码的情况
38.字符流再写入数据的时候需要调用刷新方法 才能顺利的将字符写进文件
39.线程的优先级1-10
40.线程的控制方法 sleep(线程停止,线程轮流进行实现) join(等待线程死亡,某线程执行完再执行其他线程实现) deamon(守护线程,主线程死亡 辅助线程也死亡实现)
41.synchronized 非静态方法 锁的对象是this 静态方法的锁的对象是 类名.class
42.lambda表达式的使用前提:有一个接口且接口中有且仅有一个方法
//接口
public interface Eatable {
void eat();
}
//测试方法
public class Test {
public static void main(String[] args) {
useable(() -> {
System.out.println("吃");
});
}
public static void useable(Eatable e) {
e.eat();
}
}
43.lambda抽象方法带参数无返回值。
public interface Flyable {
void fly(String s);
}
public class Flydemo {
public static void main(String[] args) {
// 没有实现接口直接使用lambda表达式的方法在匿名内部类中重写接口实现类
usefly((String s)->{
System.out.println(s);
});
}
public static void usefly(Flyable f) {
f.fly("鸟");
}
}
44.lambda抽象方法带参数有返回值。
public interface Addable {
int add(int a,int b);
}
public class AddDemo {
public static void main(String[] args) {
useAdd((int a,int b)->{
// 代码体是接口中方法最终想要做的事情
return a+b;
});
}
public static void useAdd(Addable a){
System.out.println(a.add(2,5));
}
}
45.lambda省略模式
一、可以省略类型,但是在多个参数的情况需一起省略
二、参数只有一个时可以省略小括号
三、当代码块只有一行代码时可以省略大括号和分号
四、在三情况下如果出现return 需省略
46.lambda表达式和匿名内部类的区别:表达式只接收接口类的参数、匿名内部类可以接受接口、抽象类、具体类;表达式的接口中只能有一个方法,匿名内部类可以重写多个方法;表达式编译之后没有单独的.class文件,而匿名内部类
会产生一个单独的文件。
47.接口中的默认方法:当接口需要更新但又不想破坏原有代码的情况下使用,默认方法有方法体实现类不一定重写默认方法,重写时需要去掉default 关键字
public interface Addable {
int add(int a,int b);
default void me(){
System.out.println("123");
};
}
48.接口中的静态方法:静态方法只能通过接口名来进行调用。
public interface Addable {
static void fly(){
System.out.println("飞翔吧");
}
}
49.接口中的私有方法():抽取了接口中默认方法和静态方法中相同的部分但是需注意静态方法需调用静态的私有方法
50.引用类方法:当问题可以使用lambda表达式来进行简写时也可以使用引用类方法来进行简写 引用类方法是lambda方法的孪生兄弟
public class AddDemo {
public static void main(String[] args) {
usePrintable(i-> System.out.println(i));
//推导出了usePrintable只有一个参数接口,而接口中只有一个方法且这个方法只有一个参数所以直接将参数赋值给System.out的println方法
usePrintable(System.out::println);
}
public static void usePrintable(Addable addable){
addable.printInt(5);
}
}