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 }

 

[Q]:那么设计方法判断这三种方式,谁先执行?谁后执行?

[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行的顺序是如何的。

 

posted on 2017-12-27 03:50  梧桐雨与荔枝  阅读(172)  评论(0编辑  收藏  举报

导航