9-24 程宗武
9-24
##面向对象的两个要素:
*类:对一类事物的描述,是抽象、概念上的定义
*对象:是实际存在于该类事物的每个个体,因此也成为实例(instance)
创建类的对象 = 类的实例化 = 实例化类
##类和对象的使用
*创建类、设计类的成员
*创建类的对象
*通过“对象.属性”或“对象.方法”调用对象的结构
##如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。如果修改了一个对象的属性a,不会影响到 另一个对象的属性值。
##类中属性的使用
*属性(成员变量) vs 局部变量
1、相同点
*定义变量的格式:数据类型 变量名 = 变量值
*先声明,后使用
*变量都有其对应的作用域
2、不同点:
*在类中声明的位置不同
*属性:直接定义在一对{}内
*局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
*关于权限修饰符的不同
*属性:可以在声明属性时,指明其权限,使用权限修饰符。
常用的权限修饰符:private、public、缺省、protected -->封装性
*局部变量:不可以使用权限修饰符
3、默认初始化值的情况:
*属性:类的属性:根据其属性,都有默认初始化值
整型:(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0或('\u0000')
布尔型(boolean):false
引用数据类型(类,接口、数组):null
*局部变量:没有默认初始化值
意味着我们在调用局部变量之前,一定要先赋值。
特别的,形参在调用时,我们赋值即可
4、在内存中加载的位置:
*属性:加载到堆空间中(非static)
*局部变量:加载到栈空间
/**
* ##String:字符串,使用一对""引起来表示
* 1、String声明为final的,不可被继承
* 2、String实现了Serializable接口:表示字符串是支持序列化的
* 实现了Comparable接口:表示String可以比较大小
* 3、String内部定义了final char[] value用于存储字符串数据
* 4、String:代表不可变的字符序列。简称不可变性
* 体现:1.当对字符串重新赋值时,需要重写指定内存区域值,不能使用原有的value进行赋值
* 2.当对原有的字符串进行拼接操作时,也需要重新指定内存区域赋值,不能使用原有的value 进行赋值
* 3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋 值,不能使用原有的value进行赋值
* 5、通过字面量的方式(区别于new)给一个字符串赋值,此时字符串值声明在字符串常量池中
* 6、字符串常量池中是不会存储相同内容的字符串的。
*/
/**
* String的实例化方式:
* 方式一:通过字面量定义的方式
* 方式二:通过new + 构造器的方式
* 面试题: String s = new String("abc");方式创建对象,在内存中创建了几个对象?
* 两个:一个是在堆空间中new的结构,另一个是char[]对应常量池中的数据"abc"
* 结论:
* 1、常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量
* 2、只要其中有一个是变量,结果就在堆中。
* 3、如果拼接的结果调用intern()方法,返回值就在常量池中
*/
通过变量拼接字符串的方式,相当于在堆空间中又new了一个String对象 这个对象里面的内容又指向了方法区里面的一个存放字符串元素数组的地址,str5中指向的是new 出来的String对象的地址,而 str2直接指向了方法区中存放字符串元素数组的地址,因此两个做==比较的结果为false(地址不相同)
心得
感觉每天的内容,虽然上课只讲了这么多,但是值得下来仔细研究的地方很多,很多细节都需要去仔细看。
近期评论