2017/12/27java基础学习——遇到的不懂问题
1)对于以下代码:
1 package character; 2 public class TestString { 3 public static void main(String[] args) { 4 String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象 5 String teemo = new String("提莫"); //创建了两个字符串对象 6 char[] cs = new char[]{'崔','斯','特'}; 7 String hero = new String(cs);// 通过字符数组创建一个字符串对象 8 String hero3 = garen + teemo;// 通过+加号进行字符串拼接 9 } 10 }
[Q]:其中第五行创建了两个字符串对象,是指哪两个?
[A]:new String()代表创建了一个String对象,但是也仅仅是创建了一个对象,没有办法访问它。另一个字符串对象是teemo,它是引用对象,用来指向创建的new对象。
2)String 被修饰为final,所以是不能被继承的
1 package character; 2 public class TestString { 3 public static void main(String[] args) { 4 MyString str = new MyString(); 5 } 6 /*这里会报错,因为String不能被继承*/ 7 static class MyString extends String{ 8 } 9 }
3)创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
1 /** 2 * 给点提示: 数字和字符之间可以通过互相转换 3 *char c = 'A'; 4 *short s = (short) c; 5 *通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了 6 *需要用到ASCII码对照表 7 *代码如下: 8 */ 9 package character; 10 public class TestString { 11 public static void main(String[] args) { 12 //方法1 13 char cs[] = new char[5]; 14 short start = '0'; 15 short end = 'z'+1; 16 for (int i = 0; i < cs.length; i++) { 17 while (true) { 18 char c = (char) ((Math.random() * (end - start)) + start); 19 if (Character.isLetter(c) || Character.isDigit(c)) { 20 cs[i] = c; 21 break; 22 } 23 } 24 } 25 String result = new String(cs); 26 System.out.println(result); 27 28 //方法2 29 String pool = ""; 30 for (short i = '0'; i <= '9'; i++) { 31 pool+=(char)i; 32 } 33 for (short i = 'a'; i <= 'z'; i++) { 34 pool+=(char)i; 35 } 36 for (short i = 'A'; i <= 'Z'; i++) { 37 pool+=(char)i; 38 } 39 char cs2[] = new char[5]; 40 for (int i = 0; i < cs2.length; i++) { 41 int index = (int) (Math.random()*pool.length()); 42 cs2[i] = pool.charAt( index ); 43 } 44 String result2 = new String(cs2); 45 System.out.println(result2); 46 } 47 }
20171217
1)Java中的『.』是什么意思,如 System.out.println(s);?
[A]:System是一个类,在类库中已经定义好,『.』表示该类调用println()方法。由于以下导入是默认执行的,故一般是不需要书写的。
import java.lang.System;
2)借助增强型for循环,可以很方便遍历。一个枚举都有哪些常量.
1 public class HelloWorld { 2 public static void main(String[] args) { 3 for (Season s : Season.values()) { 4 System.out.println(s); 5 } 6 } 7 }
3)[Q:疑问]Season.values()是地址吗?如果是,那么是谁的地址?
[A:答案]:是地址,是枚举类型Season的地址,地址值为Season内的首个成员变量的地址。
2018/01/01
1)java中的this.的含义,如何使用。
[A]:代表当前对象,在对象所调用的对象方法里使用,参考链接
2018/01/03
对象属性初始化有3种方式:
1.声明该属性的时候初始化
2.构造方法中初始化
3. 初始化块
如下代码段:
1 package charactor; 2 3 public class Hero { 4 public String name = "some hero"; 5 6 public Hero(){ 7 name = "one hero"; 8 } 9 { 10 name = "the hero"; 11 } 12 13 }
[A]:设计一个类方法(如下)
public static String getName(String pos){ }
1 package charactor; 2 3 public class Hero { 4 public String name =Hero.getName("属性声明") ; 5 6 public Hero(){ 7 name = Hero.getName("构造方法"); 8 } 9 { 10 name = Hero.getName("初始化块"); 11 } 12 13 public static String getName(String pos){ 14 String result= "name "+pos; 15 System.out.println(result); 16 return result; 17 } 18 19 public static void main(String[] args) { 20 new Hero(); 21 } 22 23 }
[追问Q]:在通过主方法执行的时候,为什么要实例化对象,即new Hero();这样做的原因,以及它执行代码段第4行、第6~8行、第9~11行的顺序是如何的。