Java类型相关
类型名
|
大小
|
取值范围
|
byte
|
8 bits
|
-128~127
|
short
|
16 bits
|
-32768~32767
|
int
|
32 bits
|
|
long
|
64 bits
|
|
float
|
32 bits
|
|
double
|
64 bits
|
|
Java常量
①十进制不能以0打头(数字0除外)
②十六进制必须以0x或者0X打头
③八进制必须以0打头
④长整型必须以L结尾
⑤小数常量默认为double型,如果要将小数赋值给float变量,数字后面要加f
final关键字
final 标记的类不能被继承
final 变量是常量,不能改变
final 方法不能被子类重写
Java变量
(1)当发生隐式类型转换时,目标类型取值范围要大于源类型取值范围
(2)字符串可以使用加号同其它的数据类型相连而形成一个新的字符串
Example:
System.out.println(‘a’+1); 输出的是98
System.out.println(“”+’a’+1); 输出的是”a1”
(3)局部变量一定要进行初始化
编译的时候可能只是警告,但在使用时就会报错
Java运算
(1) 整数之间做除法时,只保留整数部分而舍弃小数部分。
(2) 养成这样的习惯:把x==3 写成 3==x
(3) &和&&的区别
&&称为短路表达式,意思就是&不管两边是true或者false都会算一下,而&&如果算到前面的是false,它后面就不算了,反正综合起来表达式肯定是false。
(4) 位运算
<< 左移
>> 右移
如果最高位是0,左边移空的高位就填0,如果最高位是1,左边移空的高位就填入1
>>> 无符号右移
不管最高位是什么,移空的高位一律填入0
右移n位就是除以2的n次方
左移n位就是乘以2的n次方
Java内存
(1)Java内存分为两种:
①栈内存:用于存放基本类型变量和对象的引用变量
②堆内存:new创建的对象和数组
(2)当堆内存中的对象没有引用指向它时,它就变成了垃圾,会被垃圾回收器回收。
Java面向对象
(1)= =常用来比较引用是否指向同一个地址
equals()用来比较对象的内容是否一样
对于数组有Array.equals方法
(2)finalize()方法,它相当于C++中的析构函数,但又和析构函数不一样。因为Java里面已经有垃圾回收器了,所以finalize方法不是特别重要。另外,finalize是在对象被当成垃圾从内存中释放前调用,而不是在对象变成垃圾前调用,垃圾回收器什么时候清理垃圾是不定时的,所以不要指望用finalize做什么必要的收尾工作,因为你根本无法确定它会赶在垃圾回收器之前执行。
(3)System.gc()这个语句可以显式地调用垃圾回收器回收垃圾。
Java参数传递
(1) 基本类型的变量作为实参传递,并不能改变这个变量的值
举个例子,就是main函数里面定义的一个变量,传给一个方法,改下值,其实并没有改变main函数里面那个变量而是改了那个方法自己内部的那个副本。
(2) 那如果传递的是某个对象的引用呢?
道理一样,传递的是值,这个“值”就是引用的“值”,也就是对象的内存地址,方法通过这个地址对变量进行的修改,当然就是对main函数中定义的这个变量本身的修改了。
Java内部类
A类里面定义了B类,那么B就叫做内部类,A就叫做外部类。
B可以直接访问A类的所有变量和方法,反之不成立。
B类保存了A类的this引用。
内部类可以是static的
如果内部类被声明为static,那么它可以包含static的变量,但不再能访问外部类的非static变量。
方法内定义的内部类,只能访问方法中的final变量,而不能访问临时变量,但可以访问外部类的变量。
Java异常
(1) 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类
(2) 如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,也就是说,不能抛出新的异常。
Java线程
两种实现多线程方式
(1) 直接继承Thread
MyThread extends Thread
然后
MyThread t = new MyTread();
t.start();
t.start();
值得注意的是,无论调用start多少遍只能启动一个线程。
要实现多个线程,只能生成多个对象,分别启动线程,一个对象只能启动一个线程
(2) 实现Runnable接口
MyThread implements Runnalbe
然后
new Thread(t).start();
new Thread(t).start();
这种方法就能实现多个线程。
但这两种方法启动的多个线程又有不一样的地方:
第一种因为是生成了多个对象,所以类中声明的一些资源,比如变量等等都是各不相关的。
第二种对类中声明的资源是多个线程共享的。
所以要按需选择。
Java String和StringBuffer
String 对象不能轻易被改变,经常用的“+”其实是新生成了一个String对象,平常感觉不大,但是真的在大型应用中,对效率影响非常严重。
StringBuffer对象可以改动,一旦生成了不再变化的内容,就可以调用它的toString方法,把它转化为String对象。