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

JAVA面向对象 Part01 零碎知识点总结

2017-03-06 22:35 218 查看
 

面向对象基本概念,万物皆对象
定义:编程思想,思维方式
两种思维方式的区别:

面向过程

根据具体的操作步骤去实现程序
缺点:
不通用,耦合度高
不利于维护,不能适应变化

面向对象
解决程序适应变化的能力(可维护性强),降低功能之间的相互依赖,解耦!

如何建立面向对象思维方式:
先整体,在局部
在抽象,再具体

粒度
如何抽象:

考虑事物的共同点(共性)

能做什么,在怎么做

设计原则,设计模式

 

类与对象
类:通过类别/分类可以区分不同的事物种类
是一组具有相同特性(属性)与行为(方法)的事物集合.

对象:一切具体的事物
关系:
对象是一个个产物,是一个个体的特征
类表示一个共性的产物,是一个综合的特征
类由属性和方法租车
属性:特征
方法:行为

 

定义格式
class类名称 {属性;返回值方法名(参数…){}
}
一个类想要真正的进行操作,则必须依靠对象
类名称类对象名称
= new类名称()

访问类的属性:对象.属性
访问类的方法:对象.方法
声明对象:类名称对象名称
= null,没有内存指向,无法调用属性方法
实例化对象:类名称对象名称
= new类名称()表示分配内存,实例化对象

两种方式调用:

匿名对象调用
实例化对象(引用变量)调用属性方法

可以有多个引用类型变量共同指向一个对象

对象内存分析
栈内存,引用变量存储对象堆内存的地址
地址, 32位内存占4字节,
64位占8字节

堆内存
new:申请内存空间,表示实例化对象,创建
要尽早将对象置为null
没有引用指向的对象会被gc,可以调用System.gc();提醒系统尽快执行垃圾回收

封装性

面向对象三大特征之一
隐藏细节,仅对外部提供访问接口
好处:

模块化
重用
插件化,易于调试维护
安全,信息隐藏

构造方法

构造方法
类创建对象时自动调用的方法,用来初始化属性,也可以使用setter方法初始化
是实例化时第一个调用的方法
特点:

与类名相同
没有返回值

若没有写构造方法,编译器则会添加默认无参构造方法

构造方法的重载
可以自定义多个构造方法,但参数不同
互相可以使用this(…)调用

super(), this()必须在首行
call to super()/this() must be first statement in constructor body,只能位于构造器的首行

不能互相调用this(…)
recursive constructor convocation,递归调用构造器

构造方法私有化

保证该类只有一个对象

 

方法的重载
方法名相同,参数不同(方法签名:方法名,参数列表(参数类型,顺序,数量))
返回值,修饰符不能作为判断依据

String

实例化的两种方式
String s = new String();

常量池
堆区

String s = "";
常量池创建,若有则直接使用

区别:
直接赋值:检查字符串中的常量池(堆内存)是否存在该对象,如果存在,则指向该对象,若果不存在,则再常量池中创建并指向该对象(0/1个对象)
new:在堆中创建一个对象,然后检查字符串常量池,如果不存在,则会在常量池中创建该对象.

这种机制有助于节省内存,提高效率
由char数组存储

 

Extends
运行时常量池(Runtime Constant Pool)是方法区(Method Area)的一部分,是各线程共享的内存区域。
在方法区中,还有运行时数据区有Java堆、方法区、Java虚拟机栈、本地方法栈、程序计数器
Java虚拟机方面的知识,可以看一下下面的链接。http://www.cnblogs.com/Cratical/archive/2012/08/21/2649985.html

Notice
面向对象特征是什么:
封装,继承,多态(,抽象)

字符串相加是在堆区创建对象还是在常量池中创建对象
如果编译器可以确定,则为常量池中创建
String s = "a" + 1;
final String s =  "a"; String b = s + "a";

否则在堆区创建
String s = "a"; String b = a + "a";
String a = getString() + "a";

字符串与变量相加,会产生大量垃圾对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: