Day_02
Day_02
这是最近几天的学习总结
1. 字符参与运算实际是拿存储在计算机的ASCII码来计算的
- 0:48
- A:65
- a:97
- 字符串参与运算实则是做字符串的拼接
2. 扩张赋值运算符(/=、*=、-=、+=)隐含了强制类型转换
short s=1;
s +=1;//注意 1 是整数 原本是有损失精度的报错的。
分析: a+=10; 相当于 a=(a的数据类型)a+10;
- Shift+Tab 前移快捷方式
3. 运算符
- &&有理想效果,左边为false右边不执行 ||与之相同
- &(|)会将左右两边判定完
- 三元运算符:关系表达式:表达式1?表达式2;关系表达式为true返回表达式1,false返回表达式2.
4. 一个类中的顺序:package – > import – > class
5. Switch支持:byte、short、int、char、JDK5以后支持枚举、JDK7以后支持字符串
int i=Random.NextInt(10);//范围[0,10)
6. Java内存分配
- 栈(存放局部变量):使用完毕立即回收。局部变量随方法的调用而存在,随方法的调用完毕而消失且没有初始值。
- 堆(new 出来的对象):使用完毕后会在垃圾处理器空闲的时候回收。类方法是类对象公用的存储在方法区,需要使用的时候直接压入栈中,调用完毕后直接被回收。类的属性(成员变量)类型相同但是每个对象的具体值是不同的因此是存储在堆中(是复制了一份方法区里的成员变量并未赋值)。
- 方法区(class文件 etc.):class字节码文件(包含成员变量、成员方法(main,…)),运行的时候方法压入栈中(先进后出),main是静态先压入,之后压入其他方法,在其他方法执行完毕之后释放,最后在释放main方法。
- 本地方法区(和系统有关):
- 寄存器(CPU使用):
7. 二维数组:其实是多个一个数组组成,每个一维数组前后地址应该不是前后连续的,而是栈中各个相互独立的空间组成。
- 注意 我二维数组new出来的对象(指针,是个地址)存放在堆中,而后数组赋值是在栈中的。
如:public static void main(String []args) {
int []a=new int [3]; //这是一个局部变量,类属性才是非局部
}
8. 方法的重载:参数的个数不同,参数的类型不同。与返回值无关。
- 实际参数:实际参与运算的变量。
- 形式参数:用于接收实际参数的变量。 如果形式参数是正常的数据类型就不会影响实际参数的值,如:int long char…,不是正常的数据类型:类对象、数组…。
9. 断点:其实就是一个标记。在代码的左边对应的行点击就添加了。哪里不会不懂加哪里,必须加在有效的 语句上。如果想要看被调用方法的执行流程,被调用方法必须要加断点。
- 断点只是在调用的时候使用。:代码区右键----Debug----step over(下一步)一直点直至程序结束。
- 注意地点:
A:代码区域看程序执行流程
B:在Debug区域看程序执行流程
C:Variables看变量的变化
D:Console看程序的输入输出
- 去除断点:
A:将加断点的动作重新执行一次
B:在Debug中找到Breakpoints,选择需要删去的断点即可。
10. private关键字:解决了通过对象直接访问成员变量存在的数据安全问题。
- 是一个权限修饰符。被修饰的变量和方法只能在本类中使用和访问。
11. 封装:把属性隐藏提供公共方法对其访问(安全性、将代码进行类封装提高了代码的复用性)。private是封装、类方法是封装、类也是封装,封装无处不在。
12. this指针:代表所在类创建的对象的引用。
- 解决了:如果局部变量和成员变量同名会采用就近原则使用局部变量。
Student(int age){
age=age; //这里的成员变量并未赋值成功,而是 (局部变量)age=(局部变量)age; 应当使用 this.age=age;
}