1、面向对象的三大特征和五个基本原则?
答:
三大特征:封装、继承、多态。
五个基本原则:
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-10/71974.htm
答:类是对象的模版,对象是类的实例,类只能通过对象才可以使用。
3、类的结构?怎样取得类的结构?
答:结构:属性、方法(构造方法);通过反射。
答:空指向异常。
答:属于引用类型,传递的是堆内存的使用权。画图
6、类被封装的属性,只能通过什么方法调用?有什么规矩?
答:只能通过setter和getter方法。
答:只要是类则必定存在构造方法,它没有声明构造方法会在编译时自动生成无参、什么都不做的构造方法。
答:通过直接赋值的方法(一个字符串就是一个String类的匿名对象,即已经开辟了堆内存的并可以直接使用的对象。)画图
通过new String()实例化
内容不可改变原理:一个String类对象内容的改变实际上是通过内存地址的“断开-连接”变化完成的,而本身字符串中的内容并没有任何变化。其实还是只是改变堆内存指向问题。
与BufferString类的比较在博客Runtime类调查报告中有讲过。
9、引用传递的概念实质及过程?
答:所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间。画图
10、this形象化,this关键字 和 super关键字的比较?
答:当你进入一个房子后,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身。
静态成员函数没有this指针。
11、Java中使用satic声明的属性和方法有什么特点?static的相关应用?理解main方法?(易混知识点)
答:static声明的属性称为全局属性(静态属性),被所有对象共享。调用:类名称.static 属性
static声明的方法(类方法)
static 声明的方法是不能调用被非static类型声明的属性或方法的。(程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名称调用)
作用:使用satic属性来统计一个类到底产生了多少个实例化对象。这我在《图形工厂》中用到很多。
12、代码块的分类和特点?
答:普通代码块、构造块、静态代码块、同步代码块。静态代码块优先于主方法执行,而在类定义的静态代码块会优先于构造代码块,而且不管产生多少个对象,静态代码只执行一次。
13、构造方法私有化的应用:单态设计模式。
答:构造方法的私有化,可以控制实例化对象的产生。而单态设计模式:是在入处(构造方法)限制了对象的实例化操作。
这里注意比较:对象复制的Object.clone()不是引用,是两个对象的不同位置。
14、对象数组的使用?
答:谨记:数组一定要先开辟空间,但因为其是引用数据类型,所以数组中的每一个对象默认值是null值,则在使用时数组中的每一对象必须分别进行实例化操作。其实 在主方法中的String []args就是对象数组。
15、内部类的定义2种方法和好处?(薄弱知识点)
答:1、用static定义内部类 2、在外部访问内部类
16、谈谈类设计和程序设计的思路?