一些我总会忘记的小知识总结(Android or Java),androidjava
一些我总会忘记的小知识总结(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说明】子类继承父类的方法,如果重写该方法,里面使用的是变量是自己的变量,即使是用多态定义的。
待更新区域……
/**
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ > < ┃
* ┃ ┃
* ┃... ⌒ ... ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃
* ┃ ┃ 努力挤牙膏中~
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
如果你有任何问题或者建议以及你的容易忘记的小知识,请留言告诉我哦!~
版权声明:本文为博主原创文章,转载请标明原文地址以及作者(阿曌)。
用户评论