Java知识点总结(二)


1.类的3个基本特性

> 封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
> 继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。
> 多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。


2. 重写和重载的区别
> 重写:在子类中重新实现继承自父类的方法,重写具有多态性,当父类引用指向子类对象时,可以调用子类中重写的方法。
> 重载:允许在同一个类中定义多个同名的方法,只要参数列表不相同就可以了。 

3.“static”关键字是?

         “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。



4. 运行时异常与一般异常
异常表示程序运行过程中可能出现的非正常状态
> 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
> java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

5. Collection 和 Collections 的区别
> Collection 是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List
> Collections 是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

6. HashMap与TreeMap的区别
> HashMap通过hashcode对其内容进行快速查找,HashMap中元素的排列顺序是不固定的
> TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap

7. HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口
HashMap允许空(null)键值(key),由于非线程安全,效率上高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hastable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供同步。



8. J2EE
从整体上讲,J2EE是使用Java技术开发企业级应用的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物。
适用于企业级应用的J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。
J2EE是一个标准,而不是一个现成的产品


9. J2EE 包括哪些技术
> Servlet:是Java平台上的CGI技术。
Servlet在服务器端运行,动态地生成Web页面。
与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。
对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
> JSP(Java Server Page):是一种实现普通静态HTML和动态页面输出混合编码的技术。
借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。
在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。 
> EJB:定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。
> JDBC(Java Database Connectivity,Java数据库连接):
API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。
JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。
利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。
Java中的JDBC相当于Microsoft平台中的ODBC(Open Database Connectivity)。


10. J2EE框架的多层结构及各层的作用
>  Presentation layer(表示层)
a. 表示逻辑(生成界面代码)
b. 接收请求
c. 处理业务层抛出的异常
d. 负责规则验证(数据格式,数据非空等)
e. 流程控制
> Service layer(服务层/业务层)
a.封装业务逻辑处理,并且对外暴露接口
b.负责事务,安全等服务
> Persistence layer(持久层)
a 封装数据访问的逻辑,暴露接口
b.提供方便的数据访问的方案(查询语言,API,映射机制等)
> Domain layer(域层)
a. 业务对象以及业务关系的表示
b. 处理简单的业务逻辑
c. 域层的对象可以穿越表示层,业务层,持久层
软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自己擅长的领域。


11. abstract class和interface 的区别
> 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。
然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。
取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
> 接口(interface)是抽象类的变体。
新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是public static final的。
一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方法。
抽象类在Java语言中表示的是一种单继承的关系,对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。
抽象类中可以定义自己的成员变量,也可以包含非抽象的方法,而在接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象方法。

12. public、private、protected三个关键字的用法
                   当前类     同包         子类 其它
public √            √                √
protected √            √              
default          (不写 friendly)
private          √

13. Java 反射机制
> 在运行时判断任意一个对象所属的类。
> 在运行时构造任意一个类的对象。
> 在运行时判断任意一个类所具有的成员变量和方法。
> 在运行时调用任意一个对象的方法

14. java 的泛型
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。


15. JAVA源文件中是否可以包括多个类,有什么限制
答:一个java源文件中可以包含多个类,
每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同。
如果源文件中没有public类,则源文件用什么名字都可以,但最好还是具有特定的意义,免得自己都不记得里面写的是什么了。

16. char 类型是两个字节


17. java Switch选择语句
只能处理int,byte,short,char,(其实是只能处理int,其它三种是可以promotion到int型)
不能处理Sring 。


18. 启动一个线程是用 start() 方法

19. String类有final修饰。


20. try后的finally {} 会在 return 之前执行


21. Class.forName(String className)这个方法的作用
通过类的全名获得该类的类对象

22. AOP和OOP
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。 
将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。
AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中


23. IOC和DI
控制反转IOC(Inversion of Control) 控制指的就是程序相关类之间的依赖关系.
传统观念设计中,通常由调用者来创建被调用者的实例。
在Spring里,创建被调用者的工作不再由调用者来完成,而是由Spring容器完成,依赖关系被反转了,称为控制反转。
目的是为了获得更好的扩展性和良好的可维护性。
依赖注入(Dependency injection)创建被调用者的工作由Spring容器完成,然后注入调用者,因此也称依赖注入。
控制反转和依赖注入是同一个概念。

24. Java中的23种设计模式:
> Factory(工厂模式)
> Builder(建造模式)
> Factory Method(工厂方法模式)
> Prototype(原始模型模式)
> Singleton(单例模式)
> Facade(门面模式)
> Adapter(适配器模式)
> Bridge(桥梁模式)
> Composite(合成模式)
> Decorator(装饰模式)
> Flyweight(享元模式)
> Proxy(代理模式)
> Command(命令模式)
> Interpreter(解释器模式)
> Visitor(访问者模式)
> Iterator(迭代子模式)
> Mediator(调停者模式)
> Memento(备忘录模式)
> Observer(观察者模式)
> State(状态模式)
> Strategy(策略模式)
> Template Method(模板方法模式)
> Chain Of Responsibleity(责任链模式)


25. 工厂模式
工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。
首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。
然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。
当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

26. int是基本数据类型,Integer是int的包装类,属于引用类型


27. 多线程有几种实现方法,都是什么?同步的方法有几种,都是什么?
多线程有两种实现方法:继承Thread类或者实现Runnable接口。
实现同步也有两种方法:一种是同步方法,另一种是同步代码块。
同步方法是在方法返回类型前面加上synchronized关键字
同步代码块是synchronized (这里写需要同步的对象){…}


28. final, finally, finalize的区别
final:修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载 
finally:再异常处理时提供 finally 块来执行任何清除操作。
如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 
finalize:方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在 Object 类中定义的,因此所有的类都继承了它。
子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。


29. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

30. & 和 &&
& 是位运算符。&& 是布尔逻辑运算符。

31. EJB与JAVA BEAN的区别
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。
Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
Enterprise Java Bean 相当于DCOM,即分布式组件。
它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。
但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

32. 基本数据类型包括byte、int、char、long、float、double、boolean和short。
String 不属于基本数据类型

33. String 和StringBuffer的区别
String类提供了数值不可改变的字符串。
而StringBuffer类提供的字符串进行修改。
当知道字符数据要改变的时候你就可以使用StringBuffer。
可以使用StringBuffers来动态构造字符数据。

34. 什么是类与对象:
所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。


35. 属性与方法:
不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。


36. 什么是封装:
只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值