[Java]初学笔记(持续更新)
<Thinking in Java>读书笔记
this
关于关键字this,除了用于在类中消歧之外,还可以在构造函数中调用其他构造函数。
this(参数们); //这里表示调用该类中对应的构造函数。
有2点需要注意:
(1)这种调用必须是构造函数中的第一个语句
(2)通过这种方式一次只能调用一次构造函数(因为(1))
例如:
public class Person
{
private int age;
private String name;
Person(int p_age, String p_name)//构造方法1
{
this.age = p_age;
this.name = p_name;
}
Person(int p_age)//构造方法2
{
this(p_age,"Unknown");//调用构造方法1
}
public static void main(String[] args)
{
Person p = new Person(99);
}
}
Java 和 C#的区别:
在Java中
1.所有的方法默认为virtual;
2.所有数值类型都是有符号(signed)类型,不存在无符号(unsigned)类型; p23
3.没有sizeof(); p56
4.switch中的case只能和int, char 和 enum匹配; p74
5.switch中的case可以不写break而进行互相穿透;
6.当类的字段(field)是基本类型时,可以不被显示初始化,会被赋予默认值; p92
//目前看到page:108
重要的区别!
(0)字符串比较,==居然比的是引用地址!!! 需要比较实际字符集是否相等需要调用equals()方法
(1)没有神器get/set!!!只能通过手共设置普通方法来完成对应操作
(2)List之类的东西不支持[]式的快速访问,只能分别通过list.get(index)/list.set(index)来获取/设置值
(3)二维数组不支持[][]方式访问...我无力了...
(4)没有decimal,不过有一个java.math.BigDecimal,不过这个东西用起来要很小心,很容易犯错误。
(5)最绝的,没有以2为底的log函数,提供的java.math.log()方法是以e为底数的!!!一定要小心,如果需要计算log_2需要自己换底。(我忍不住要吐槽一下,这玩意儿这真的是为程序员设计的麽???)
(6)Map之类容器的contains()方法内置陷阱,非常容易引人犯错。
默认的contains(Object obj),就算你设置了泛型这个方法接受的参数也是一样的。
例如我有Map<Integer,String> mapKV;
当我需要确认我的Map中是否存在Key:1的记录时
调用mapKV.containsKey(1);和mapKV.containsKey("1");产生的结果是完全不一样的,此错误非常隐蔽,从C#转来的我在这里被卡了很久很久。所以别看containsKey(...)接受的是Object参数,你一定需要手动将传入的参数手动转换成和key匹配的类型传入才行!!!
我就觉得很奇怪了,Integer.Parse((object)1)和Integer.Parse((object)“1”)产生的结果明明是一样的,最后却出现这种结果,实在是不能理解啊!!!
实例如下:
int i = 1;
Object oi = 1;
String s = "1";
Object os = "1";
System.out.println(Integer.parseInt(oi.toString()));
System.out.println(Integer.parseInt(s.toString()));
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "damn you java");
if(m.containsKey(i))
{
System.out.println("String i = 1 - OK");
}
else
{
System.out.println("Object i = 1 - Fail");
}
if(m.containsKey(oi))
{
System.out.println("Object oi = 1 - OK");
}
else
{
System.out.println("Object oi = 1 - Fail");
}
if(m.containsKey(os))
{
System.out.println("Object os = 1 - OK");
}
else
{
System.out.println("Object os = 1 - Fail");
}
if(m.containsKey(s))
{
System.out.println("String s = '1' - OK");
}
else
{
System.out.println("Object os = '1' - Fail");
}
输出:
1
1
String i = 1 - OK
Object oi = 1 - OK
Object os = 1 - Fail
Object os = '1' - Fail
... ... to be continued

浙公网安备 33010602011771号