欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

一些我总会忘记的小知识总结(Android or Java),androidjava

来源: 开发者 投稿于  被查看 29063 次 评论:35

一些我总会忘记的小知识总结(Android or Java),androidjava


在项目开发时过于追求大的知识,比如多线程下载,网络请求等,往往会忽略一些非常小的知识,有时候为了验证想法和实际我会开辟一个工程专门用来验证,接下来就是我验证过的一些,看看你是否会忽略呢?


1. arrayList.add(null)是允许的吗?

2. ArrayList添加一个String对象,改变该String对象后再添加,结果是添加了两个一样的对象还是不一样的?

ArrayList<String> strList = new ArrayList<String>();
String str = "abc";
strList.add(str);
str = "123";
strList.add(str);
strList.add(null);
System.out.println("strList = " + strList);
//输出结果
strList = [abc, 123, null]

所以
1. ArrayList是可以添加null对象的;
2. ArrayList添加一个String,改变值后再添加,得到的是两个不同的String

如果你用ArrayList存储对象,拿出来用之前记得有必要判空哦!~
而如果你需要重复添加String类型的话,定义一个String,不停覆盖值就够了!~


3.foreach的对象如果是空会怎样?

ArrayList<String> strings = null;
for (String str : strings) {
}
//结果
Exception in thread "main" java.lang.NullPointerException

所以
3.foreach的对象不能为空,否则会报空指针

这里就要注意如果以后传数据的时候,如果要用到foreach的话,最好先判断数据是否为空!~


4.String如果初始化为null,打印出来是什么?

String str = null;
System.out.println("str = " + str);
//输出结果
str = null

所以
4.String为null的话打印出来也是null。

如果你不希望得到这个结果的话,记得判空哦!~


5.Android 如何在初始化时获取TextView的宽高?

tv.measure(0, 0);
int width = tv.getMeasuredWidth();
int height = tv.getMeasuredHeight();

在初始化过程中,默认调用 tv.getHeight()是不能得到真实高度的(得到的值为0),是因为View要等到 onLayout()结束后才能用getWidth()|getHeight()得到宽高。同样,在onMeasure()结束后,才能得到getMeasuredWidth(),第一句tv.measure(0, 0);相当于强制调用了onMeasure(),所以二三句就能得到宽高了(注意dp和px的误差)。

6.子类覆盖父类的属性探究

需要“煮个栗子”先:

栗子1:

//Father.java
public class Father {
    public String name = "Father";
}

//Son.java
public class Son extends Father {
    public String name = "Son"; //子类重写了属性
}

//Main.java
public static void main(String[] args) {
    //test 1
    Father son = new Son(); //多态
    System.out.println("son name is " + son.name);

    //test 2
    Son son1 = new Son();
    System.out.println("son1 name is " + son1.name);
}

输出结果:

son name is Father
son1 name is Son

【��栗子1说明】属性不具备多态性

栗子2:

//Father.java
public class Father {
    public String name = "Father";

    //父类加了一个方法
    public void printName() {
        System.out.println("Father: name is " + name);
    }
}

//Son.java
public class Son extends Father {
    public String name = "Son"; //子类只重写了属性
}

//Main.java
public static void main(String[] args) {
    //test 1
    Father son = new Son();
    son.printName(); //调用方法打印

    //test 2
    Son son1 = new Son();
    son1.printName(); //调用方法打印
}

输出结果:

Father: name is Father
Father: name is Father

结果一样。

【��栗子2说明】子类默认继承父类的方法,如果不重写该方法,里面使用的是变量是父类的变量。

我们需要煮第三个栗子进一步探究:

栗子3:

//Father.java
public class Father {
    public String name = "Father";

    public void printName() {
        System.out.println("Father: name is " + name);
    }
}

//Son.java
public class Son extends Father {
    public String name = "Son";
    //子类重写了printName方法
    public void printName() {
        System.out.println("Son: name is " + name);
    }
}

//Main.java
public static void main(String[] args) {
    //test 1
    Father son = new Son();
    System.out.println("--- son name is " + son.name);
    son.printName(); //调用方法打印

    //test 2
    Son son1 = new Son();
    System.out.println("--- son1 name is " + son1.name);
    son1.printName(); //调用方法打印

}

输出结果:

--- son name is Father
Son: name is Son

--- son1 name is Son
Son: name is Son

【��栗子3说明】子类继承父类的方法,如果重写该方法,里面使用的是变量是自己的变量,即使是用多态定义的。


待更新区域……

/**
 *         ┏┓   ┏┓
 *        ┏┛┻━━━┛┻┓
 *        ┃       ┃  
 *        ┃   ━   ┃
 *        ┃ >   < ┃
 *        ┃       ┃
 *        ┃... ⌒ ... ┃
 *        ┃       ┃
 *        ┗━┓   ┏━┛
 *          ┃   ┃          
 *          ┃   ┃   努力挤牙膏中~
 *          ┃   ┃           
 *          ┃   ┃        
 *          ┃   ┃
 *          ┃   ┃           
 *          ┃   ┗━━━┓
 *          ┃       ┣┓
 *          ┃       ┏┛
 *          ┗┓┓┏━┳┓┏┛
 *           ┃┫┫ ┃┫┫
 *           ┗┻┛ ┗┻┛
 */

如果你有任何问题或者建议以及你的容易忘记的小知识,请留言告诉我哦!~

版权声明:本文为博主原创文章,转载请标明原文地址以及作者(阿曌)。

相关频道:

用户评论