java像ts+node+es6 但是比js的一套繁琐
es6:多了SetMap箭头函数反射等
typescript:多了类型接口泛型私有等
nodejs:多了模块文件流等
java从main运行 js除了声明提升,按顺序
最外层class和文件名要相同
类≈构造函数,方法≈函数
java里主体都是构造函数吗
java字符串双引号(且是引用类型) js单双无所谓
java基本类型byte short int long float double char boolean 其他都是引用 js基础类型Undefined Null
Boolean Number String 其他都是对象
必须分号
java大括号作用域 js函数作用域
java小范围转大隐性 大转小强制 js隐性
java运算隐性转大范围
java方法 = 没有闭包的js函数
不能方法包方法,但是能方法包类包方法 形成“假闭包”,访问外部变量必须final
java没有===只有==
java里boolean不能转换所以if(1)报错
java不定参... js可以arguments也可以...
java里数组类型相同、length不能变 (ArrayList(Collenction的一个子类)必须引用类型,必须相同类型,各种方法名字不一样,其他≈js数组 ) js无所谓
Arrays的方法不能用在ArrayList
ArrayList查询快LinkedList增删快 LinkedList中push方法是向第一位添加 和js相反!
java直接打印数组是内存地址 js打印会出tostring
java里堆内存方法也是地址,指向方法区 (方法区里包含一个static区) js里函数就是对象,在堆内存
static≈类自有方法 不传给对象
继承≈js原型链 覆盖父类稍有不同,因为java有重载,所以要参数也相同才覆盖,返回值要求范围在父类返回值里 子类权限不得小于父类 js里名字覆盖就行 es6里连语法都很像了 但底层实现还是原型
static比普通的先出现
static方法不能访问非static 也不能用this
一个包下的多个class相当于在同一个文件里 没有写在一起清晰啊
多态时子类不能用超出父类的方法
final意如其名 广义的常量
calendar.date和day一样? js里day是星期几 为什么要把date和calendar分开?
增强for( item : arr ){} 能遍历很多 比js好用
泛型就是 某类型 用的时候确定 泛型通配符<?>只用在接受参数
打乱顺序java有方便的shuffle方法 js要手动实现
java很多代码用alt+insert和alt+enter完成
后端要对前端传进来的参数做验证
多线程用实现Runnable接口比继承Thread好
Lambda表达式-> ≈ 阉割版js箭头函数=> Lambda必须使用接口且接口有且仅有一个抽象方法 流读取文件read方法有点怪吧?
// 流读取文件read方法有点怪
byte[] bytes=new byte[1024];int len = 0;while((len=fis.read(bytes))!=-1){fos.write(bytes,0,len);}
字节流(网络传输用这个)不能读中文 字符流能读中文但只有调用flush()或close()才会把内容内存中写进文件
缓冲流相当于基本流外面套一层 速度更快
转换流可以指定编码表
序列化流存取对象 static和transient标签的不能被序列化 存多个对象的时候先放到一个集合里
print流只能输出
网络传输客户端Socket服务端ServerSocket
网络传输要加一个shutdownOutput()表示发完了
服务器端用线程、线程池提高效率 可以用while(true)死循环保持服务端开启
apply是转换类型的 和js完全不一样
stream流 多次遍历 比增强for更好用
方法引用:: 我觉得没简化多少还影响可读性
反射 获取类属性,调用类方法 是java框架的核心 js里proxy/defineProperty是框架的核心
注解本质上是接口