[Java]初学笔记(持续更新)
2012-05-01 21:43
656 查看
<Thinking in Java>读书笔记
this
关于关键字this,除了用于在类中消歧之外,还可以在构造函数中调用其他构造函数。
this(参数们); //这里表示调用该类中对应的构造函数。
有2点需要注意:
(1)这种调用必须是构造函数中的第一个语句
(2)通过这种方式一次只能调用一次构造函数(因为(1))
例如:
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”)产生的结果明明是一样的,最后却出现这种结果,实在是不能理解啊!!!
实例如下:
输出:
1
1
String i = 1 - OK
Object oi = 1 - OK
Object os = 1 - Fail
Object os = '1' - Fail
... ... to be continued
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
相关文章推荐
- java笔试题的笔记(持续更新)
- JAVA基础知识学习笔记(持续更新中。。)
- Java学习笔记(持续更新)
- Java Web 课堂笔记整理(持续不定时更新)
- Java笔记 (持续更新ing)
- 笔记:java开发中一些好用的开源jar包工具(将不定期持续更新)
- java学习笔记总结,持续更新中
- java动态生成实例笔记<持续更新中>
- [置顶] Java HashMap学习笔记(持续更新)
- Thinking in java 个人笔记 第二章(持续更新ing)
- Thinking‘ in java 个人笔记 第一章(持续更新ing)
- Thinking in java 个人笔记 第五章(持续更新ing)
- Java学习笔记【持续更新】
- Java 基础学习笔记(持续更新中)
- JAVA学习笔记(持续更新...)
- 我的JAVA学习笔记(记下一些容易忘记的知识点)持续更新
- Thinking in java 个人笔记 第三章(持续更新ing)
- Java 学习笔记--持续更新
- JAVA中的面向对象初学(持续总结更新...)
- Python初学笔记——琐碎知识,based on 2.7.3,持续更新中