耐心是一切聪明才智的基础。
https://mp.weixin.qq.com/s/wnoBuliPY6gL6ox5JV-v5Q
https://mp.weixin.qq.com/s/OrFbIMzLethowDl24f97OA
https://mp.weixin.qq.com/s/eZO7-sbnaMm7QV3u-z3OWA
c++异同
- java 为
纯面向对象
语言 所有代码都必须在类中实现 除基本类型 都是类
-
不支持多继承
但是可以多实现接口 - java没有
指针
概念 提供了垃圾回收 不用显性的管理内存的分配 - 平台无关性
一次编译 到处运行
- Java是
解释性
语言 先编译成字节码 然后由jvm解释执行 也可以编译执行
基本类型
https://www.jianshu.com/p/1a79a62bd700
12341234
byte short int long boolean char flout double
equals和hashcode
equals
比较值。hashcode
粗略比较值。
hashcode
不相等equals
一定不相等。
hashSet,hashMap
的key
怎么判断不存在呢?
hashcode不存在 && equals false
hashcode
https://www.jianshu.com/p/be943b4958f4
https://stackoverflow.com/questions/49172698/default-hashcode-implementation-for-java-objects/49175508#49175508
JDK8 的默认hashCode的计算方法是通过和当前线程有关的一个随机数+三个确定值
项目中的lombok @Data
注解 会重写hashCode
和对象值相关 同样值的对象hashCode
是一样的。
自动拆箱装箱
基本类型和基本对象之间的转化。
自动装箱:valueOf
基本类型->基本类型对应的对象
自动拆箱:intValue(),doubleValue()
基本类型对应的对象->基本类型
泛型
泛型可以提高 代码的可读性 以及安全性
只发生在 编译期间 会替换成Object
通配符分为:
- 限定 <? extends T> <? super T>
- 非限定<?>
test(List<? extends A> aa) //aa为A的子类或者A
aa.add(new B());//报错 只能添加null
A a = aa.get(0);//最低是自己
test(List<? super A> aa) // aa 为A的父类或者A
aa.add(new B());//最高自己
B a = aa.get(0);//最低也是父类
多态
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
方法重写(Overriding
) 重写父类方法。
方法重载(Overloading
) 多个方法名相同的方法。
- 绑定技术
静态绑定final | static | private
都是静态绑定 编译之后 会生成this关键字。
动态绑定 一个虚方法表,存于jvm的方法区 。
内部类
https://www.liaoxuefeng.com/wiki/1252599548343744/1376414781669409
public static void main(String[] args) { Test test = new Test(); //不会触发 内部类的加载 //普通内部类 必须先创建一个类的实例
Test.InnerTest test1 = test.new InnerTest(); //静态内部类 创建不依赖父类的实例
Test.StaticInnerTest test2 = new Test.StaticInnerTest();
System.out.println("dfd");
-
静态内部类
不依赖父类的实例 所以可以用它来实现外部类的单例。
初始化不会触发 外部类的加载 非静态内部类
-
匿名类
(函数式编程 lambda)
循环一秒多少次
int i = 0;
for (;;){
if(i > 100000) return;
System.out.println(i);
i++;
}
这样的循环 一秒能跑几十w次 光循环的话 一秒差不多可以百万
switch底层是int实现的
https://mp.weixin.qq.com/s/HhOIcaPoQtm9Xj-FsEEJhg
byte short String Enum 最终都是转化为int的
long因为转化不了所以不支持
接口默认作用域
https://www.journaldev.com/1601/interface-in-java
接口方法 默认是abstract and public (所以不用加public修饰符)
网友评论