数据类型 | 大小 | 范围 | 默认值 | |
整型 | byte | 1字节 | -27—27-1 | 0 |
short | 2字节 | -215—215-1 | 0 | |
int | 4字节 | -231—231-1 | 0 | |
long | 8字节 | -263—263-1 | 0L | |
浮点型 | float | 4字节 | -3.4E38—3.4E38 | 0.0f |
double | 8字节 | -1.7E308—1.7E308 | 0.0d | |
字符型 | char | 2字节 | \u0000—u\ffff | ‘\u0000’ |
布尔型 | boolean | true、false | false |
类(class) 接口(interface) 数组(array)java
一元运算符 | ||||
正 | 负 | 自增1 | 自减1 | |
+ | - | ++ | -- | |
二元运算符 | ||||
加 | 减 | 乘 | 除 | 取余 |
+ | - | * | / | % |
十进制转二进制express
按位与 | & | 两个数都为1则为1,不然为0 |
按位或 | | | 有一个为则为1,不然为0 |
异或 | ^ | 两个数字相同则为0,不然为1 |
非 | ~ | 1转0,0转1,而后转补码(正数补码为本身,负数补码符号位不变再按位取反加1) |
带符号左移 | << | 左移低位补0 |
带符号右移 | >> | 右移使用符号扩展机制,若是正数,则高位补0,若是负数,则高位补1. |
无符号右移 | >>> | 不管正数仍是负数,都高位补0 |
等于 | 不等于 | 小于 | 大于 | 不大于 | 不小于 | |
== | != | < | > | <= | >= |
与 | 或 | 非 | 短路与 | 短路或 |
& | | | ! | && | || |
布尔表达式?表达式1:表达式2
true 返回表达式1值,false返回表达式2值编程
=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=数组
a instanceof B 若a继承B或a是B类型,则为true;不然false
注:
a为某个实例,且a必须是能够经过(B)a强转成B类型的,否则编译器会报错。 B不能指定泛型参数安全
优先级 | 运算符 | |
1 | ()、[] | 从左往右 |
2 | !、+(正)、-(负)、~、++、-- | 从右往左 |
3 | *、/、% | 从左往右 |
4 | +(加)、-(减) | 从左往右 |
5 | <<、>>、>>> | 从左往右 |
6 | <、<=、>、>=、instanceof | 从左往右 |
7 | ==、!= | 从左往右 |
8 | &(按位与) | 从左往右 |
9 | ^ | 从左往右 |
10 | | | 从左往右 |
11 | && | 从左往右 |
12 | || | 从左往右 |
13 | ?: | 从左往右 |
14 | =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^= | 从右往左 |
1.if-else
if(A)
①
else
②
A为true执行①,不然执行②多线程
2.if-else if-esle if...
if(A)
①
else if(B)
②
else if(C)
③
A为true执行①跳出结构体,下面代码不执行并发
1.for
for(initialization;Boolean-expression;step)
statement
函数式编程
2.foreach
for(variable : collection)
statement函数
3.while
while(A)
①
A为true执行①,直到A为false中止执行①
4.do-while
do{
①
} while(A);
A为true执行①,直到A为false中止执行①,与while的区别,do-while至少执行语句①一次
this
break、continue、return
注:
①break是跳出当前循环,continue是跳出当前当次循环
②若循环里嵌套循环break只能跳出一个,return能够跳出整个循环
1.switch
switch(A)
case B:
①;
break;
case C:
②;
break;
注:
①A必须是byte、short、char、int及其包装类、String(jdk1.7以上)、enum
②若不用break,不会跳出结构体代码会继续执行
1.封装
把对象的属性、方法结合成一个独立的总体,并尽量隐藏对象的内部细节,只须要调用不用知道里面的如何实现,就像调试接口同样,只要管入参和返回结果便可,这样作有利于程序的安全以及能够减小耦合度。举个例子,我想吃碗汤面,去哪家面馆都行,可是若是我知道有一家面馆汤是药草精炼特制而成能大补,我会更想去那家依赖大补的功能,假若我知道那汤是如何作的,我能够把配方拿出去卖,对于那家面馆就失去了核心竞争力。
2.继承
子类继承父类,子类能够获取父类的属性和行为,并根据自身的须要扩展新的属性和行为,这样利于代码的复用以及程序的扩展。举个例子,先定义一个类汤面,有属性:汤、面,而这时我须要给汤面加块大肉就能够派生出大肉汤面或者加块大排骨就能够派生出排骨汤面。
注:
①.子类继承父类,子类会拥有父类全部行为和属性,可是访问权(指子类调用)不必定都有
修饰符 | 当前类 | 同包内 | 子孙类 | 其余包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
重载:发生在同一个类,方法名必须相同,参数类型不一样,个数不一样,方法返回值和访问修饰符能够不一样
重写:发生在父子类,方法签名必须相同,返回值类型不大于父类,抛出异常不大于父类,访问修饰符不小于父类
static修饰的是属于这个类,和类对象无关,建议直接用类调用便可.
注:
①.执行顺序:
父类静态变量和静态代码块
子类静态变量和静态代码块
父类成员变量和非静态代码块
父类构造方法
子类成员变量和非静态代码块
子类构造方法
②静态方法不会预先执行,非静态代码块在每申明一个新对象时都会执行一次
③.由于static修饰的最早加载,因此static修饰的方法不能直接调用非静态的方法和属性,也所以不能使用this、super,不能被重写
final就是最终的,不可修改的意思。修饰的类不能被继承,修饰的方法不能被重写,修饰的变量为常量只能赋值一次
call by value:值传递(值指基本数据类型),不会改变实际参数的数值
call by reference:引用传递,不能改变实际参数的参考地址, 能改变实际参数的内容
注:
不管哪一种传递传参传递的都是是参数的拷贝
①clone方法 默认克隆方法是浅复制(对象引用地址不同,对象基本数据类型属性不同而引用类型属性同样),而深复制对象引用地址不同,对象基本数据类型属性不同且引用属性也不同。其次clone是protected的,由于Object类不知道其子类有哪些引用类型,作不到深拷贝,为此必须从新定义clone方法,并将其声明为public实现深拷贝,防止其余地方调用修改了对象引用属性而影响了此对象。当使用clone方法时类须要实现cloneable给一个标记,这样就不会抛出异常 ②equals与hashCode方法 equals用于确认两个对象是否相同,默认equals方法比较的是内存地址,而两个不一样对象(内存地址不一样)具备相同属性时咱们但愿这两个对象相等,因此须要重写equals方法,而为何须要重写hashCode方法,由于对象调用equals方法返回true时,他们的hashCode方法返回值也要相等,因此同时须要重写hashCode方法。哈希值相同的对象不必定equals,而equals放回true的两个对象必定哈希值相同。 ③toString与getClass方法 toString返回对象值的字符串,当咱们须要查看对象部分属性时则重写toString方法 getClass返回Class对象 ④wait()、wait(long)、wait(long, int)、notify、notifyAll() 多线程用到(例如生产者消费者),wait方法当前线程由运行状态变为阻塞状态进入等待队列,会释放当前锁 notify唤醒一个线程,notifyAll唤醒全部线程,有关多线程等我看完并发实践会具体分析本身感悟.. ⑤finalize gc时用来肯定被回收对象时候没有被引用