1、什么是抽象? 软件开发本身,就是一个不断抽象的过程。我们把业务需求抽象成数据模型、模块、服务和系统,面向对象开发时我们抽象出类和对象,面向过程开发时我们抽象出方法和函数。也即是说,上面提到的模型、模块、服务、系统、类、对象、方法、函数等,都是一种抽象。
2、类与对象的关系? 类是对具有相同属性或功能的一类事物的抽象,类是抽象的。 对象是用来描述客观事物的实体,对象是具体的。 即类是对象的抽象,对象是类的实例。
3、基本数据类型?(占用空间大小、取值范围、包装类型、默认值) Java语言有8种基本数据类型,这八种基本数据类型习惯上可分为4种类型。 1、逻辑类型:Boolean。 2、整数类型:byte、short、int、long。 3、字符类型:char。 4、浮点类型:float、double。 Boolean占用1个字节,取值范围(“true”和“false”),包装类型:Boolean,默认值“false”; byte占用1个字节,取值范围(-128~127),包装类型:Byte,默认值0; shory占用2个字节,取值范围(-32768~32767),包装类型:Short,默认值0; int占用4个字节,取值范围(-2147483648~2147483647),包装类型Integer,默认值0; long占用8个字节,取值范围(-9223372036854775808~9223372036854775807),包装类型:Long,默认值0L; char占用2个字节,取值范围(0~255),包装类型:Character,默认值为空; float占用4个字节,取值范围( -3.4E+38 ~ 3.4E+38),包装类型:Float,默认值0.0f; double占用8个字节,取值范围(-1.7E-308~1.7E+308),包装类型:Double,默认值0.0d。
4、第一个Java程序(打印一个字符串,输出当前日期) import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class Test { public static void main(String[] args) { Date now=new Date(); Calendar now=Calendar.getInstance(); Format formatter=new SimpleDateFormat(“yyyy年MM月dd日HH时mm分ss秒”); System.out.println(“当前日期=”+formatter.format(date)); } }
5、什么是“驼峰命名法”? 骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。 小驼峰法: 变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。譬如 int myStudentCount;变量myStudentCount第一个单词是全部小写,后面的单词首字母大写。常用于函数名。 大驼峰法: 相比小驼峰法,大驼峰法(即帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,属性,命名空间等。譬如public class DataBaseUser;
6、什么是继承? 继承是一种由已有的类创建新类的机制。利用继承,可以先编写一个共有属性的一般类,再根据该一般类编写具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加新的状态和行为。由继承得到的类称为子类,被继承的类称为父类(超类)。Java不支持多重继承(子类只能有一个父类)。
7、什么是多态?分为那4类? 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。 多态分为四类:参数多态,包含多态,过载多态,强制多态,前两种为通用多态,后两种为特定多态。
8、面向对象设计五大原则? 五大基本原则:SPR, OCP, LSP, DIP, ISP **单一职责原则SRP(Single Responsibility Principle):**是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。
**开放封闭原则OCP(Open-Close Principle):**一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
**里式替换原则LSP(the Liskov Substitution Principle LSP):**子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
**依赖倒置原则DIP(the Dependency Inversion Principle DIP):**具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能 造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。
**接口分离原则ISP(the Interface Segregation Principle ISP):**模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来
9、什么是拆箱和装箱? 值类型转换为引用类型是装箱。 引用类型转换为值类型是拆箱。 装箱使任何事物看起来都像是一个对象,即装箱是一种让值类型看起来好像引用类型的处理过程。这样才符合面向对象把一切事物都看成对象的思想。当然有装箱就有拆箱。
10、Java为什么可以跨平台使用? Java语言的出现是源于对独立于平台语言的需求,希望用这种语言能编写出嵌入各种家用电器等设备的芯片上,且易于维护的程序。Java语言和其他语言相比,最大的优势就是编写的软件能在执行码上兼容,能在所有的计算机上运行。Java之所以能做到这一点,是因为Java可以在计算机的操作系统之上再提供一个Java运行环境,该运行环境由Java虚拟机、类库以及一些核心文件组成,也就是说,只要平台提供了Java运行环境,用Java编写的软件就能在其上运行。