主要内容是补充自己的知识漏洞
知识来自拉勾教育Java高薪训练营
1.二进制位数转换:
正10转正2:
辗转除2并逆向取余数
正2转10:
2的幂对应相加
负10转2:
首先10进制绝对值按照上文方法转为2进制
随后按位取反
最后加一
负2转10:
把负10转2的顺序全都反过来
先减去1
再按位取反
最后按照原方法
异或:相同为0,不同为1
字符串比较是否一致使用 .equals(str)
flag=!flag转换boolean状态
String类型.split方法会返回多个字符串,要用数组接收
str转int
int year =Integer.parseInt(input_strs[0]);
主函数中直接return可以中断程序运行
if (month <= 0 || month >12 || day<=0 || day> dayofmonth[month-1])
{
System.out.println("输入不合法");
return ;
}
8.构造子类时执行顺序
父类静态->子类静态(类层级)
父类构造方法->父类构造代码块
子类构造方法->自尅构造代码块
9.访问控制符
10.多肽的实际意义
多肽实际是为了能用一个方法接收父类的指针,而打印不同子类的重写的方法。因为子类重写方法非常繁多,为了统一管理所以使用了多肽。
11.抽象类为了多肽而存在
(1)作为方法体传入参数
(2)直接用抽象类定义子类,调用方法更纯粹
12.接口只能继承接口,不能继承类
13.
可以在接口中定义静态方法,调用时直接使用接口.方法名使用
15.内部类调用外部类中的同名变量
16.创建内部类的方法
静态上下文不能访问非静态,因为可能还没创建对象
17.类对象一样可以强转,当需要使用某个特定方法时,强转为目标对象类型
18.==运算符用来判断在栈区内存放的数据是否相等,如果是引用类型则判断是否是相同的引用
19.重写的方法只是重写方法的一部分
当重写了Student类中的hashCode后,String类的hashCode依然可以按照原来的方法使用
19.自动装箱拆箱机制
首先直接传入3.1415926转为对象类型的Double
然后将对象类型的Double转换为变量类型的double
在这之中不需要任何方法,只需直接=即可
20.字符串转double
直接的强制类型转换无法完成
利用Double类中的valueOf方法可以完成
字符串转int同样可以
21.Double类中的非数字检测
22.BigInteger与BigDecimal需要用够早对象的方法实现装箱,无法快速装箱
23.final修饰String类,所以不能被继承
24.final修饰数组表示指向不能改变
25.直接用字符串赋值的只有String类一种
26.常量池的存在不可忽视
27.左右常量均等号则比较常量池中位置
左右引用均等号则比较引用地址是否相同
28.常量有优化机制,变量没有
29.byte转为string的方法:
30.封装类中的下标
31.java中字符串的拼接除了加号还可以
str1.concat
如果检索是否存在某子串可以使用
str1.contains
如果想要确认具体位置需要
str1.indexOf(String st)
很方便的去掉留白方法
32.字符串遍历所需要的方法
因为查找某个字符串会返回第一次找到的位置,但是方法带有一个额外的参数可以返回从指定位置之后第一次找到指定字符或字符串的位置,所以只要用一个迭代就可以找到所有想要的字符串以及指定的位置。
除了正向查找需要的字符串,也可以反向查找
33.从特定位置向后取x位
33.正则运算符
34.字符串切割
35.StringBuilder可变字符串
常用方法中的insert是返回自己,append也是
36.String和StringBuilder的区别
String类描述的是一个不可改变的字符串
而StringBuilder描述的是一个可以改变(内容与长度)的字符串
37.删除一次后字符串会向前补位
38.使用StringBuilder一样可以从指定位置想=向后对某个字符进行查询
39.StringBuilder笔试考点
40.
41.集合的定义
42.常用方法
43.在集合中添加类的时候一定要实例化后添加
如果提前new好了就可以直接写入,没有new好就在传入时new一下
44.在重写初始化方法时不要加任何的修饰符
45.集合与类的互动以及集合和集合的互动
如果c1.addAll(c2)那么就是一个一个的添加进v=c1
c1.add(c2)就是把c2的整体放入c1
46.如何在集合中判断是否存在相同的元素呢
首先:如何判断相同
在contains方法内部传入的是Object类型的引用,所以会调用子类重写的equals,如果没有重写那么就使用父类的equals,二父类的equals是哦判断地址是否相同,那么对重写后的类就不适用了,所以在调用contains方法前,要确定自己写的类中已经重写了equals方法,才能保证判断的正确性。
47.关于集合中的add和contains方法,如果想对单个元素进行判断就要使用add活contains,对多个元素判断就要使用addAll或者containsAll
48.删除List类中的元素时,一定记住不可以用i++
删除元素
因为删除之后元素的下标会递减,导致删除的元素不正确
49.List类中获取子集取左不取右
50.取出的子集和原集合共用同一块内存空间
所以删除后都会失去元素,但是目前我使用的java版本如果
51.泛型的作用.jpg
52.如果想用TreeSet类存放数据,那么泛型所指定的类必须实现
自然排序规则或比较器规则中的一个
通果 实现接口来实现
53.IO流需要掌握的知识
54.多线程两种实现方式
第一种实现方式是让类继承Thread父类,在调用时使用Thread类引用指向new的类实体
Thread a = new 子类() ;
a.start()
还有一种方法是
Thread a = new Thread(子类);
第一种实现方式的劣势是无法继承本需要继承的类,因为java中只能继承一个类。
第二种实现方法是让类实现runnable接口,从而重写run方法,然后达到多线程的目的。
54.多线程通同步锁能否启用的关键在于同步锁使用的是否是同一个对象
在类中定义了一个普通的成员变量,在新建类的同时l对象也会被新建,所以同步锁的作用对象是同一个类的run方法无法同时运行,而不同类的run方法可以同时运行。
但是如果将lock对象改为static修饰,那么所有的属于Lock类的对象都共用一个同步锁,就可以锁得住所有的Lock类对象了