Java的一些细枝末节
main函数必为void,static public修饰可以调换位置
正确的写法:
<code class="java">public class main{
static public void main(String args[]){
...
}
}
错误的写法:
<code class="java">public class main{
void static public main(String args[]){
...
}
}
main函数必带String[]参数
正确的写法:
<code class="java">public class main{
static public void main(String messages[]){
...
}
}
<code class="java">public class main{
static public void main(String [] messages){
...
}
}
错误的写法:
<code class="java">public class main{
static public void main(String messages){
...
}
}
shell执行java程序时,args[0]为第一个参数,往后递推
<code class="java">public class main{
static public void main(String [] messages){
System.out.pritnln(messages[0]);
}
}
结果如下
<code class="shell">$java main hello
$hello
关于强制类型转换造成的数值溢出问题
正数补码 反码 原码相同
(byte)251=-5
251补码为00000000 00000000 00000000 11111011
应为byte占一位,去除前面24位为11111011
第一个符号位,代表为负数。负数求原码为求反+1
0000101(2)=5
结果为-5
java.awt.event.包并不属于java.awt.
也就是说要同时导入两个包
<code class="java">import java.awt.event.*;
import java.awt.*;
各种数据类型所占字节大小
一个字节=8位二进制有效数字,另外由于使用JVM,数据大小与平台无关。
– 1 byte = 1 字节
– 1 short = 2 字节
– 1 char = 2 字节
– 1 int = 4 字节
– 1 double = 8 字节
Java的两大数据类型
- 基本数据类型
- 引用数据类型
基本数据类型包括:int double byte float …
引用数据类型就是个种类,包括封装了基本数据类型的类(Integer …)
Java的模板机制
貌似是采用继承自Object的方式来间接实现模板功能,有待验证…
成员访问域
- pulic修饰:公共成员,任意类都可以访问
- private修饰:私有成员,只有自己可以访问
- protected修饰:保护成员,包内的类都可以访问,包外的类只有子类能访问
- 无修饰:包控制访问,包内的类都可以访问
关于lambda表达式
范例
<code class="java">List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
采用lambda表达式的方式,直接将代码块当成参数使用,避免定义无用的函数。
使用接口,直接完成对ArrayList内自定类的排序
范例
<code class="java">Collections.sort(StudentList, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
if(Integer.valueOf(o1.getMark())>Integer.valueOf(o2.getMark()))
return -1;
else if(Integer.valueOf(o1.getMark())==Integer.valueOf(o2.getMark()))
return 0;
else
return 1;
}
} );
关于多线程锁的使用
除了使用synchronized关键字来实现同步锁,也可以使用lock()函数达到同样的效果。