本帖最后由 coqns 于 2012-12-11 19:50 编辑
学习java基础视频已经有一段时间了,自己总结了一些容易犯错以及疏忽的地方
一、构造方法
1.未显式定义构造方法时,系统会自动定义无参构造方法。
2.显式定义有参构造方法后,系统就不会再自动定义无参构造方法,所以如果这个时候再想Peron p=new Person();的话,自己就必须再显式定义无参构造方法。
二、“==”和“equals”
1.==是判断两个变量或实例是不是指向同一个内存空间(比较引用)。
2.equals是判断两个变量或实例所指向的内存空间里的值是不是相同(比较内容)。- public class CompareDemo
- {
- public static void main(String[] args)
- {
- String s1=new String("123");
- String s2=new String("123");
-
- //这个时候s3和s1无论是指向的内存地址还是地址里面的值都完全相等
- String s3=s1;
-
- //输出结果为false,说明==比较的是指向的内存地址
- System.out.println(s1==s2);
- //输出结果为true,说明equals比较的是值
- if (s1.equals(s2))
- System.out.println("true");
- else
- System.out.println("false");
- }
- }
复制代码 三、栈内存和堆内存- class Demo
- {
- public static void main(String[] args)
- {
- int[] arr1=new int[]{1,2,3};
- int[] arr2=arr1;
- arr2[0]=10;
- System.out.println(arr1[0]);
- }
- }
复制代码 如上面这段代码,arr1[0]初始化的时候值是‘1’,也并没在在代码里见更改它的值,但最后输出的时候却是‘10’。这是因为arr2没有new,而是指向arr1的,所
以arr2不是在堆内存里又新开辟了一个空间,而是和arr1共享了。所以改了arr2[0]的值,arr1[0]的值也就改了。
四、成员变量和静态(类)成员变量
1.静态成员变量是随着类的初始化开始随着类的结束而结束的。在这期间它一直在方法区中存在。
2.成员变量则是用到了的时候才会在堆内存中创建。
所以静态方法中不能调用普通成员变量。
五、日期格式化
比如下面这段代码,我现在运行后结果是:(当前日期是:2012-59-26)
月份会不正常,面当把"yyyy-mm-dd"改成"yyyy-MM-dd"后就会正常。所以MM大写是严格的,不能因为旁边y和d是小写面疏忽
另外Date类现在已经被标为过时,应该用Calendar类了,这个是Java对日期的最新支持的类,用这个获取时间就不会出错的- import java.util.Date;
- import java.text.SimpleDateFormat;
- class Demo
- {
- public static void main(String[] args)
- {
- Date date=new Date();
- SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
- String result=sdf.format(date);
- System.out.println("当前日期是:"+result);
- }
- }
复制代码 六、int和Integer
首先,int是基本类型而Integer则是引用类型,Integer是int的封装类。下面则是区别
1.int的默认值为0,它无法表达出未赋值的情况。
2.Integer的默认值为null,它可以表达出未赋值的情况(null),且自带有很多方法,比如类型转换。
比如说要区分出未参加考试和参加考试但考了0分,int就做不到,而Integer可以。
|
|