你强任你强,我干我本行——Java基础(上)

1、Java数据类型

1.1 基本数据类型

数据类型 大小 范围 默认值
整型 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
:
① 浮点数计算会出现偏差,用BigDecimal类

1.2 引用数据类型

类(class) 接口(interface) 数组(array)java

2、运算符

2.1 算数运算符

一元运算符
自增1 自减1
+ - ++ --
二元运算符
取余
+ - * / %
:
① a++ 先赋值,后自增 ++a 先自增,后赋值
eg. 若a初始值为1 //a=a++ a为1 //a=++a a为2

2.2 位运算符

十进制转二进制express

按位与 & 两个数都为1则为1,不然为0
按位或 | 有一个为则为1,不然为0
异或 ^ 两个数字相同则为0,不然为1
~ 1转0,0转1,而后转补码(正数补码为本身,负数补码符号位不变再按位取反加1)
带符号左移 << 左移低位补0
带符号右移 >> 右移使用符号扩展机制,若是正数,则高位补0,若是负数,则高位补1.
无符号右移 >>> 不管正数仍是负数,都高位补0

2.3 关系运算符

等于 不等于 小于 大于 不大于 不小于
== != < > <= >=
:
① == 对于基本数据类型而言是校验其值是否相等,对于引用类型是判断引用地址是否相同

2.4 逻辑运算符

短路与 短路或
& | ! && ||
:
① 短路与/或和物理串联同样,一个gg,全都gg
&& 与 &的区别:前者只要有一个条件不知足,后面条件再也不判断,然后者全判断
|| 与 |的区别:前者只要有一个条件知足,后面条件再也不判断,然后者全判断

2.5 三目运算符

布尔表达式?表达式1:表达式2
true 返回表达式1值,false返回表达式2值编程

2.6 赋值运算符

=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=数组

2.7 instanceof运算符

a instanceof B 若a继承B或a是B类型,则为true;不然false
:
a为某个实例,且a必须是能够经过(B)a强转成B类型的,否则编译器会报错。 B不能指定泛型参数安全

2.8 优先级:

优先级 运算符
1 ()、[] 从左往右
2 !、+(正)、-(负)、~、++、-- 从右往左
3 *、/、% 从左往右
4 +(加)、-(减) 从左往右
5 <<、>>、>>> 从左往右
6 <、<=、>、>=、instanceof 从左往右
7 ==、!= 从左往右
8 &(按位与) 从左往右
9 ^ 从左往右
10 | 从左往右
11 && 从左往右
12 || 从左往右
13 ?: 从左往右
14 =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^= 从右往左

3、流程控制

3.1 条件语句

1.if-else
if(A)

else

A为true执行①,不然执行②多线程

2.if-else if-esle if...
if(A)

else if(B)

else if(C)

A为true执行①跳出结构体,下面代码不执行并发

3.2 循环语句

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

3.3 中断流程控制

break、continue、return
:
①break是跳出当前循环,continue是跳出当前当次循环
②若循环里嵌套循环break只能跳出一个,return能够跳出整个循环

3.4 多选择语句

1.switch
switch(A)
case B:
①;
break;
case C:
②;
break;
:
①A必须是byte、short、char、int及其包装类、String(jdk1.7以上)、enum
②若不用break,不会跳出结构体代码会继续执行

4、面向对象

4.1 三大特征

1.封装
把对象的属性、方法结合成一个独立的总体,并尽量隐藏对象的内部细节,只须要调用不用知道里面的如何实现,就像调试接口同样,只要管入参和返回结果便可,这样作有利于程序的安全以及能够减小耦合度。举个例子,我想吃碗汤面,去哪家面馆都行,可是若是我知道有一家面馆汤是药草精炼特制而成能大补,我会更想去那家依赖大补的功能,假若我知道那汤是如何作的,我能够把配方拿出去卖,对于那家面馆就失去了核心竞争力。
2.继承
子类继承父类,子类能够获取父类的属性和行为,并根据自身的须要扩展新的属性和行为,这样利于代码的复用以及程序的扩展。举个例子,先定义一个类汤面,有属性:汤、面,而这时我须要给汤面加块大肉就能够派生出大肉汤面或者加块大排骨就能够派生出排骨汤面。
:
①.子类继承父类,子类会拥有父类全部行为和属性,可是访问权(指子类调用)不必定都有

修饰符 当前类 同包内 子孙类 其余包
public
protected ×
default × ×
private × × ×
②子类的方法只能访问其实例的受保护 成员属性或方法,也就是继承过来的,而不能访问其父类实例受保护的的属性及方法(在不一样包内) eg.Object obj = new Object 没法看到obj的clone方法.
③.java类不支持多继承,继承破坏了封装性由于子类拥有父类private修饰的属性或方法而且会拥有父类全部属性和行为,请谨慎使用继承,问本身是否须要向上转型须要则用继承(is-a),不然使用组合(has-a)(能够看看《敏捷软件开发:原则、模式与实践》第十四章)
3.多态
不一样类对象对同一行为作出不一样响应。
多态必要条件:①继承;②重写;③向上引用(父类引用指向子类对象)
## 4.2 抽象类与接口 若父类方法能够没有方法体且该类对象没有任何意义,那么我能够把这个方法定义为抽象方法,而且该类定义为抽象类。
注:抽象类能够没有抽象方法,有抽象方法的类必定是抽象类。抽象类不能实例化,若父类有抽象方法,子类继承不重写那么子类也是抽象类。抽象类与通常类的区别就是抽象...
由于java不支持多继承,只能扩展一个类,而且若一个类并不想拥有另外一类的全部属性及行为并没有本质上的联系,相互之间只是一种契约关系,那么接口应声而出,接口相对于抽象类而言抽象类是对类抽象,接口是对类局部行为的抽象,是更纯粹的抽象类。
接口与抽象类区别:
①接口没有构造方法,抽象类能够有
②接口没有成员属性,所定义的变量都是static final修饰的,抽象类能够有(1.8由于出了函数式编程,又由于OCP原则,接口能够申明默认方法具备方法体,不要在接口中定义常量)
③接口没有静态方法,抽象类有
④多实现,单继承

4.3 重载与重写

重载:发生在同一个类,方法名必须相同,参数类型不一样,个数不一样,方法返回值和访问修饰符能够不一样
重写:发生在父子类,方法签名必须相同,返回值类型不大于父类,抛出异常不大于父类,访问修饰符不小于父类

4.4 static

static修饰的是属于这个类,和类对象无关,建议直接用类调用便可.
注:
①.执行顺序:
父类静态变量和静态代码块
子类静态变量和静态代码块
父类成员变量和非静态代码块
父类构造方法
子类成员变量和非静态代码块
子类构造方法
②静态方法不会预先执行,非静态代码块在每申明一个新对象时都会执行一次
③.由于static修饰的最早加载,因此static修饰的方法不能直接调用非静态的方法和属性,也所以不能使用this、super,不能被重写

4.5 final

final就是最终的,不可修改的意思。修饰的类不能被继承,修饰的方法不能被重写,修饰的变量为常量只能赋值一次

4.6 call by value 与 call by reference

call by value:值传递(值指基本数据类型),不会改变实际参数的数值
call by reference:引用传递,不能改变实际参数的参考地址, 能改变实际参数的内容
注:
不管哪一种传递传参传递的都是是参数的拷贝

4.7 Object方法

①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时用来肯定被回收对象时候没有被引用

相关文章
相关标签/搜索