找工作告一段落了,不管如何,向前看。本来学的是C++,但因为将来工作需要,开始学Java,记录点基础知识点,方便自己回顾。
1. 位运算符:
>>> : 使用 0 填充高位 (*)
>> :使用符号位填充高位
<<< :Java 没有这个运算符
2. 检查字符串是否相等:
s.equals( t ):s、t 可以使字符串变量,也可以是常量( “Hello”.equals(greeting); OK)
“ == ” :确定两个字符串是否放在同一个位置上;因为只有常量字符串是共享的,而 + 或 substring 等操作会生成新的字符串,
所以不可以使用 == 判断字符串是否相等。
3. 空串 和 null 串
null 串:表明没有任何对象与该String变量关联;使用 if(str == null) 判断是否为空
空串: 是一个长度为 0 的字符串,空串是一个Java对象,有自己的长度(0)和内容(空),判断空串 if(str.length() == 0)或 if(str.equals(""))
注:检查一个字符串既不是null 也不是 空串: if(str != null && str.length() != 0),首先检查str不为null,然后才可以调用方法,null调用方法会出错。
4. 数组
- int[] array = new int[100];
获得数组中元素的个数 array.length,注意 没有“()”小括号,不是方法
- 多维数组 : double[][] balances = new double[N][M];
可以单独存取数组的某一行,所以可以让两行交换
double[] temp = balances[i];
balances[i] = balances[i + 1];
balances[i + 1] = temp;
5. 类之间关系
- 依赖 use-a:一个类的方法操纵另一个类对象
- 聚合 has-a:类A 的对象包含类B 的对象
- 继承 is-a: 表特殊与一般的关系
6.对象与对象变量
- 所有Java对象都存储在堆中
- new Date() 构造了一个Date类型对象,并且它的值是对新创建对象的引用
- Date deadline; 定义了一个对象变量,它可以引用一个Date类型的对象
※ 变量deadline 不是一个对象,它只是可以 引用一个对象(并没有包含一个对象)
※ 如果deadline 没有引用对象(未初始化),则不能将任何Date方法应用于这个变量
- Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用
- 可以显示地将对象变量设置为null,将方法应用于值为null的对象会产生 runtime error
- 局部变量不会自动初始化为null,必须通过调用 new 或 将 他们设置为 null 进行初始化
7. 时间、日历类(Date、GregorianCalendar)
- Date类表示一个时间点,精确到毫秒数;GregorianCalendar表示日历
- Date获取年、月、日的方法不鼓励使用,可以使用before(after)方法比较一个时间点是否早于(晚于)另一个时间点
- GregorianCalendar有多个构造器
new GregorianCalendar()
new GregorianCalendar(1999, 11, 31) // 月份从0开始,11 表示十二月
new GregorianCalendar(1999,Calendar.DECEMBER, 31) // 月份使用常量,更清晰
new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59) // 设置具体时间
- GregorianCalendar 的get 方法、set 方法
GregorianCalendar now = new GregorianCalendar();
int month = now.get(Calendar.MONTH); // 获取月份
now. set( Calendar.MONTH, Calendar.OCTOBER); // 设置月份
// 其他类似
- GregorianCalendar 的 add 方法
now. add(Calendar.MONTH, 3); // 将 now 表示的日期增加 3个月
※ 如果传递的数值是 负数,日期就向 前移
- GregorianCalendar 的 getTime、setTime 方法实现 与 Date 类之间的转换
Date time = calendar.getTime(); // Calendar 类转 Date
calendar. setTime(time); // Date 类转Calendar
补充:http://blog.csdn.net/shibenjie/article/details/4263912
8. 构造器
- Java中的构造器,C++中的构造函数。
- 所有Java对象都是在堆中构造的,所以Java构造器总是和 new 操作符一起使用;C++可以在堆、栈上构造对象
Employee number007("James Bond", 100000, 1950, 1, 1); // C++, not Java
- 不要在构造器中定义与实例域重名的局部变量(在所有的方法中不要命名与实例域同名的变量)
9. 类与方法
- C++中方法可以定义在类的外部,如果在类的内部定义方法,则自动成为 内联(inline)方法
- Java中的方法必须定义在类的内部,但并不表示它们是内联方法。是否将某个方法设置为内联方法是 JAVA 虚拟机的任务。
- 不要编写返回 引用可变对象 的访问器方法,否则 对类外部对象变量 调用更改器 就可以更改原对象内部的私有成员变量,破坏类的封装。如果需要返回一个可变对象的引用,应该首先对它进行克隆,对象 clone 是指存放在另一个位置上的对象副本。
class Employee {
public Date getHireDay() {
return hireDay.clone();
}
}