java面试每日十题(九)

版权声明:欢迎来玩呀~ https://blog.csdn.net/Javaxiaobaismc/article/details/82891006

81、获得一个类的类对象有哪些方式?

答:有四种方式:

第一种,通过类本身来获得对象。

第二种,通过子类的实例获取父类对象。

第三种,通过类名加.class获取对象。

第四种,通过类名的字符串获取对象。

 

 

82、如何通过反射创建对象?

答:通过反射来生成对象有两种方式:

1、通过Class对象的newInstance()方法来创建Class对象对应类的实例。这个方法是使用Class对象对应类的默认构造器创建对象,这就要求Class对象对应类必须要有默认构造器。如String.class.newInstance()

2、使用Class对象获取指定的Constructor对象,调用Constructor对象的newInstance()方法来创建Class对象对应类的实例。这个方法可以使用Class对象对应类的任意指定的构造器来创建实例。如String.class.getConstructor(String.class).newInstance(“Hello”)

 


83、如何通过反射获取和设置对象私有字段的值?

答:可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了。

 

 

84、如何通过反射调用对象的方法?

答:先得到该对象所对应的class对象,然后通过该class对象得到该类的构造方法所对应的Constructor对象,跟着通过该Constructor对象的newInstance方法得到该类的一个实例对象,通过class对象得到该方法所对应的Method对象,最后通过该Method对象的invoke()方法进行调用。

 


85、简述一下面向对象的"六原则一法则"。

答:六个原则一法则是:单一职责原则、开闭原则、依赖倒转原则、里氏替换原则、接口隔离原则、合成聚合复用原则和迪米特法则。

单一职责原则:一个类只做它该做的事情。

开闭原则:软件实体应当对扩展开放,对修改关闭。

依赖倒转原则:面向接口编程。

里氏替换原则:任何时候都可以用子类型替换父类型。

接口隔离原则:接口要小而专,不能大而全。

合成聚合复用原则:优先使用聚合或合成关系复用代码。

迪米特法则:又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。

 


86、简述一下你了解的设计模式。

答:所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 
在GoF的《Design Patterns: Elements of Reusable Object-Oriented Software》中给出了三类(创建型[对类的实例化过程的抽象化]、结构型[描述如何将类或对象结合在一起形成更大的结构]、行为型[对在不同的对象之间划分责任和算法的抽象化])共23种设计模式,包括:Abstract 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 Responsibility(责任链模式)。

工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作(多态方法)。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

代理模式给一个对象提供一个代理对象,并由代理对象控制原对象的引用。实际开发中,按照使用目的的不同,代理可以分为:远程代理、虚拟代理、保护代理、Cache代理、防火墙代理、同步化代理、智能引用代理。


87、用Java写一个单例类。

答:饿汉式单例:

懒汉式单例:

 


88、什么是UML?

答:UML是统一建模语言(Unified Modeling Language)的缩写,它发表于1997年,综合了当时已经存在的面向对象的建模语言、方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。使用UML可以帮助沟通与交流,辅助应用设计和文档的生成,还能够阐释系统的结构和行为。

 

 

89、UML中有哪些常用的图?

答:UML定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结构,包括:用例图(use case diagram)、类图(class diagram)、时序图(sequence diagram)、协作图(collaboration diagram)、状态图(statechart diagram)、活动图(activity diagram)、构件图(component diagram)、部署图(deployment diagram)等。在这些图形化符号中,有三种图最为重要,分别是:用例图(用来捕获需求,描述系统的功能,通过该图可以迅速的了解系统的功能模块及其关系)、类图(描述类以及类与类之间的关系,通过该图可以快速了解系统)、时序图(描述执行特定任务时对象之间的交互关系以及执行顺序,通过该图可以了解对象能接收的消息也就是说对象能够向外界提供的服务)。

 

 

90、用Java写一个冒泡排序。

答:

猜你喜欢

转载自blog.csdn.net/Javaxiaobaismc/article/details/82891006