1、在C和C++中将一个较大作用域的变量“隐藏”起来的做法,在Java里不允许
{ int x=0; { int x=1;//illegal } }
import java.util.Random; public class RandomTest { public static void main(String[] args) { //设置了种子(48位),则每次生成相同的伪随机序列 Random r=new Random(23); int j=r.nextInt(100); int i=r.nextInt(); boolean v=r.nextBoolean(); print(j); print(i); print(v); } public static void print(Object obj){ System.out.println(obj); } }
5、equals方法并不是判断两个对象的值相等,对象的值如何相等?equals方法是Object类提供的一个实例方法, 这个方法判断两个对象是否相等的标准和==没有区别(对于基本类型变量,且都是数值型,则只要两个变量的值相等,即返回true;对于引用类型变量,只有指向同一个对象时才返回true)String类已经重写了equals方法。
6、移位运算public class Test4 {
public static void main(String[] args) {
int i=-1;
print("i:"+Integer.toBinaryString(i)+" "+i);
i>>>=10;
print("i无符号右移10位:"+Integer.toBinaryString(i)+" "+i);//若计算结果为0001111则会省略前面的所有0
i>>=4;
print("i右移10位:"+Integer.toBinaryString(i)+" "+i);
i<<=4;
print("i左移10位:"+Integer.toBinaryString(i)+" "+i);
}
public static void print(Object obj){
System.out.println(obj);
} }
public class Test { static String ternary (int i){ return i<10?"i<10":"i>=10"; } static String ifelse (int i){ if(i<10){ return "i<10"; }else{ return "i>=10"; } } static void print(Object obj){ System.out.println(obj); } public static void main(String[] args) { print("ifelse():"+ifelse(11)); print("ternary():"+ternary(11)); } }
// 例程1: public class Test5 { public static void main(String[] args) { Random rand=new Random(47); float f[]=new float[10]; for(int i=0;i<10;i++){ f[i]=rand.nextFloat(); } int i=0; for(float x:f){ System.out.println("x["+(i++)+"]="+x); } } } //例程2: public class Test { public static void main(String[] args) { for(char x:"niao peng".toCharArray()){ System.out.println(x+" "); } } }
public class Test { public static void main(String[] args) { int i = 0; outer: while (true) { System.out.println("Outer while loop"); while (true) { i++; System.out.println("i=" + i); if (i == 1) { System.out.println("Continue"); continue; } if (i == 3) { System.out.println("continue outer"); continue outer; } if (i == 5) { System.out.println("break"); break; } if(i==7){ System.out.println("break outer"); break outer; } } } } }14、switch()语句中的参数只能是整数值如int、char,每一个执行路径都得加break,否则继续执行下面的语句
switch(integral-selector){ case integral-value1:statement;break; case integral-value1:statement;break; ... default:statement; }15、Java是如何区分重载的方法:每个重载的方法必须有一个独一无二的参数类型列表(甚至参数的顺序不同也能区分两个方法,但是这样做使得代码难以维护),不可以用方法的返回类型不同来区分。基本类型参数传递给重载方法时可以将一个"较小"的类型自动提升至一个"较大"的类型。假如方法接受较小的基本类型参数,而实际传入的参数较大,则必须通过类型转换来窄化,否则编译器报错。
public class TestFinalize { private static TestFinalize tf=null; public static void main(String[] args) throws InterruptedException { new TestFinalize (); System.gc(); Thread.sleep(4000);//这句话不能少,虽然显式调用了System.gc(),但是系统没有立即执行,程序暂停时才执行了垃圾回收 tf.showInfo(); } public void finalize() { tf=this; } public void showInfo(){ System.out.println("showInfo() has been called!"); } }
public class Test { public static void main(String[] args) { House h = new House(); h.print(); } } class Window { Window(int a) { System.out.println("Window(" + a + ")"); } } class House { Window window1 = new Window(1); public House() { System.out.println("House"); window3 = new Window(33); } Window window2 = new Window(2); void print() { System.out.print("zpc"); } Window window3 = new Window(3); }
static { int i=0; System.out.println("initialized"); }//该块只执行一次,即该类加载时,因此static修饰的初始化块总是普通块先执行 { int i=0; System.out.println("initialized"); }//每次实例化该类都执行
Integer[] b=new Integer[]{ new Integer(1),new Integer(2),3, };
public class Test { static void f(int require,String... args){ System.out.print("require:"+require); for(String s:args){ System.out.print(" "+s); } System.out.println(); } public static void main(String[] args) { f(1,"one"); f(2,"one","two"); f(0); } }注:可变形参只能处于参数列表的最后,一个方法最多包涵一个长度可变的形参。调用一个形参长度可变的方法时,除了可以传入多个参数,也可以直接传入数组,甚至不传参数。
public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; }//enum关键字在某种程度上和class、interface关键字作用大致相似
public enum SeasonEnum { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); private String season; private SeasonEnum(String season){ this.season=season; } public String getSeason(){ return this.season; } public static void main(String[] args){ SeasonEnum se=Enum.valueOf(SeasonEnum.class, "FALL");//SeasonEnum se=FALL; System.out.println(se.getSeason()); se.season="春天"; System.out.println(se.getSeason()); } }