一、Java 字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| * Created by simon on 15/11/22. */
public class MyText { public static void main(String[] args){ String str1 = null; String str2 = ""; String str3 = " "; String str4 = "abc"; System.out.println(str1); System.out.println(str4+str1); System.out.println(str1.length()); } String stra = new String("abc"); String strb = "abc"; 以strb的形式建立字符串时,JVM会首先在字符串常量区寻找 ”abc“ 字符串 如果没有则在字符串常量区新建 “abc” 字符串,不会为其在内存空间中开辟区域 以 new 的方式建立字符串时,无关字符串常量区,都会开辟一个段的内存空间 */ }
|
二、带label的 break 和 continue 语句
以这两段代码为例考虑 count 的值:(System.out语句为方便理解后加的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| public class MyText { public static void main(String[] args) { int count = 0; outerLabel: for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { count++; System.out.println("i: "+i); System.out.println("j: "+j); System.out.println("count: "+count); if (count > 2) { System.out.println("inner"); continue outerLabel; } } count += 10; System.out.println("hello" + i); } System.out.print(count); } } ````
````java public class MyText { public static void main(String[] args) { int count = 0; outerLabel: for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { count++; System.out.println("i: "+i); System.out.println("j: "+j); System.out.println("count: "+count); if (count > 2) { System.out.println("inner"); break outerLabel; } } count += 10; System.out.println("hello" + i); } System.out.print(count); } }
|
三、多态和instanceof关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public class MyText { public static void main(String[] args) { Father a = new Son(); Son s = (Son)a; System.out.print(a instanceof Son); System.out.print(a instanceof Father); System.out.println(s instanceof Son); System.out.println(s instanceof Father); a.print(); s.print(); s.print(1); a.print1(); s.print1(); s.print2(); 不同之处在于相同的方法,例如 Son 类的 print方法如果没有参数的话,采用如下的调用方式:
a.print(); s.print(); 二者都会调用 Son 的方法 */ } } class Father{ public void print(){
System.out.println("Father");
} public void print1(){
System.out.println("print1");
} } class Son extends Father{
public void print(int i){
System.out.print("Son");
} public void print2(){
System.out.println("print2"); } } }
|
四、继承和构造函数
构造函数在继承中的几条原则:
- 子类必须调用基类的某个构造方法(使用super()调用父类或者this()调用本类的其他构造方法)
- 如果子类没有显示调用父类的构造方法,那么会默认调用父类的无参构造方法,先构造父类,再构造子类,如果父类子类存在同名成员,则调用的是子类的成员。
- 子类没有显示调用父类的构造方法,父类也没有无参的构造方法,编译出错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 这段代码来自 java-konas 无法正常编译运行 */
public class AboutConstructors {
class A { String someString = "a"; public A() { someString += "x"; } } class B extends A { public B() { someString += "g"; }; } @Koan public void simpleConstructorOrder(){ assertEquals(new B().someString, "axg"); } class Aa { String someString = "a"; public Aa() { someString += "x"; } public Aa(String s) { someString += s; } } class Bb extends Aa { public Bb() { super("Boo"); someString += "g"; }; } @Koan public void complexConstructorOrder(){ assertEquals(new Bb().someString, "aBoog"); } }
|