您的位置:首页 > 编程语言 > Java开发

[Java]初学笔记(持续更新)

2012-05-01 21:43 656 查看
<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: