1. 构造代码块
public class App {
{
System.out.println("Ctor");
}
}
在创建对象的时候会被调用,对比与静态代码块
public class App {
static{
System.out.println("Load Class");
}
}
这个只有在类加载的时候调用一次。
2.代码块标签
t: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if(j==i)
continue t;//等价 break
if(j==5)
break t;//跳出最外层循环t
}
}
类似goto的使用,这个在java中还是很有用的,尤其是在循环嵌套。
3.静态导入
import static java.lang.System.out;
public class App {
{
out.println("import static");
}
}
必须是导入类中字段或者成员,方便使用。
4.位移>>>,>>-2,<<-3
out.println(1 << -31);// 2147483647
最高位补充0,不管是正还是负。
out.println(1 << -31);// 2
out.println(4 >> -31);// 2
在位移为负数时位移数为32+n(如32-31=1)
5.Java权限修饰符是四种
private,protected,friendly(默认),public
import static java.lang.System.out;
public class App {
void f(){
out.println("friendly");
}
}
类App中的f只能在包内被访问,其他包,子包都无法访问。
6.内部类的private,protected对它的外部类是可见的
public class App {
public static void main(String[] args) throws Exception {{
new C().f();
}
private static class C {
private C() {
}
public void f() {
}
}
}
以上代码是完全正确的。
7.一个.java文件中可以写任意多个类,但是只能文件名同名类为public。
class App{
}
class A{
}
以上代码保存在App.java中编译成功,若把A改为public则出错。
8.java 中禁止java.开头的包名,安全需要,因为这类包只能有bootstrap类加载器加载。
如下代码编译出错:
package java.x;
public class App{
public static void main(String[] args) throws Exception {
}
}
9.Java中方法泛型参数的传递方法为如下:
import java.util.List;
public class B <T>{
T t;
public B(T t){
this.t=t;
}
public void f1(){
this.<List>f();
}
public <K extends List> void f(){
K k;
k=(K)t;
System.out.println(k.add("1"));
}
}
参数在前,方法名在后,Java中的泛型只是在编译器级别做了处理,运行时类型擦出为Object类型。
10.内部类引用外部类成员
public class C {
public String s;
public C(String s){
this.s=s;
}
public class CC{
private String s;
void f(){
System.out.println(s);
System.out.println(C.this.s);
}
}
}
创建内部类对象
C c=new C("123");
C.CC cc=c.new CC();
cc.f();
。。。未完待续