`
YuHuang.Neil
  • 浏览: 181316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
请列举使用private级别的构造方法的场合。 答:构造方法可以处于public, protected, private和默认这4种访问级别之一。在以下场合之一,可以把类的所有构造方法都声明为private类型。 (1)在这个类中仅仅包含了一些供其他程序调用的静态方法,没有任何实例方法。其他程序无须创建该类的实例,就能访问类的静态方法。例如,为了禁止外部程序创建Math类的实例,Math类的唯一的构造方法是private类型的。 (2)为了禁止这个类被继承。当一个类的所有构造方法都是private类型时,假如定义了它的子类,那么子类的构造方法无法调用父类的任何构造方法,因此会导致编译错误。 ...
在Java中,构造方法必须满足什么样的规则,构造方法能够被static, final, synchronized, abstract和native修饰吗?请说明你的理解。 答:构造方法一般需要满足以下几条规则:       (1)方法名必须与类名保持一致。       (2)不 ...
在Java中显示创建对象的方式有多少种? 答:在Java中有四种显式创建对象的方式:       (1)最简单和直接的方式当然就是使用new语句创建对象。       (2)使用反射手段创建对象,调用java.lang.Class或者java.lang.reflect.Constru ...
请阐述一下不同类加载器加载的类之间的可见性。 答:不同类加载器的命名空间存在以下关系:       (1)同一命名空间内的类是相互可见的。      (2)子加载器的命名空间包含所有父加载器的命名空间。因此由子加载器加载的类能看见                  其父加载器加载的类。比如,系统类加载器加载的类能够看见根类加载器加载的类。       (3)由父加载器加载的类不能看见子加载器加载的类。       (4)如果两个加载器之间没有直接或间接的父子关系,那么它们各自加载的类相互是不可               见的。 比如,我现在定义了一个加载器类MyClassLoader, ...
类加载器是Java虚拟机中重要的部分,请自定义一个类加载器来实现.class文件的加载功能。 答:要创建一个用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定了类的名称,返回对应Class对象的引用。下面编写一个MyClassLoader来实现.class文件的加载功能。 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import j ...
请你说明一下什么是运行时包? 答:由同一类加载器加载的属于相同包的类组成了运行时包。决定两个类是不是属于同一个运行时包,有两个条件:第一,包名是否相同。第二,定义类加载器是否相同(定义类加载器是指能成功加载某个类的加载器称为这个类的定义类加载器,所有能成功返回该类Class对象的引用的加载器[包括定义加载器]被称为初始类加载器)。只有属于同一运行时包的类才能相互访问包可见的类和类成员。 扩展思考:Java虚拟机之所以引入运行时包的概念从根本上来说还是基于安全的考虑,这样的限制能够避免用户自定义的类冒充核心类库的类,去访问核心类库的包可见成员。假设用于自己定义了一个类java.lang.Spy ...
请问什么是Java类加载的父亲委托(Parent Delegation)机制,举例说明一下类加载的委托机制的运行过程以及基于父亲委托机制实现的类加载器的设计目的。 答:Java类加载的父亲委托机制是指,当程序请求加载类的时候,当前的加 ...
所谓Java类加载器就是虚拟机用来将类加载在其内部的字节文件加载模块。Java虚拟机采用了父亲委托机制,这种机制能更好地保证Java平台的安全。在这种委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父加载器。加载器的加载逻辑是,加载器首先委托其父加载器去加载需要加载的类,若父加载器能够顺利加载此类,则加载工作全部交给父加载器完成,否则将由加载器自身去完成加载工作。 Java虚拟机自带的类加载器有如下三种类型: 1、根类加载器:这种加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等等。同时,java.lang.Object就是由根加载器加 ...
分析下面代码的运行结果,并给出具体的原因。 public class ClassB { public static void main(String[] args) throws Exception { ClassLoader loader=ClassLoader.getSystemClassLoader(); Class objClass=loader.loadClass("ClassA"); System.out.println("af ...
请给出下列程序的运行结果,并分析原因: class Base{ static int a=1; static{ System.out.println("init Base"); } static void method(){ System.out.println("method of Base"); } } class Sub extends Base{ st ...
Java类在哪些情况下才会被初始化? 答:根据Java虚拟机规范,只有在程序首次主动使用一个类或者接口时才会初始化它。要说明Java类在哪些情况下会被初始化,就是要找出哪些活动被视作程序对类或接口的主动使用。主要6个活动会使得Java类被初始化: (1)最基本的就是创建类的实例,这个肯定是要对类进行初始化的。创建类的实例的途径主要有:使用new语句创建实例,或者通过反射、克隆以及反序列化手段来创建实例。 (2)调用类的静态方法。 (3)访问某个类或者接口的静态变量,或者对该静态变量赋值。 (4)调用Java API中某些反射方法,比如调用Class.forName("xxx&quo ...
Java虚拟机在类的加载、连接和初始化阶段都做了哪些工作? 答:(1)加载阶段:查找并加载类的二进制数据。       (2)连接阶段:包括验证、准备和解析类的二进制数据。               验证:确保被加载的类是正确的。               准备:为类的静态变量分配内存,并将其初始化为默认值。               解析:把类中的符号引用都替换成直接引用。       (3)初始化:给类的静态变量赋予正确的初始值。         在类或接口被加载和连接的时机上,Java虚拟机规范给实现提供了一定的灵活性,但是它            严格定义了初始化的时机,就是 ...
经典最长平台算法 已知一个已经从小到大排序的数组,这个数组中的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中[1]、[2,2]、[3,3,3]、[4]、[5,5]、[6]都是平台。尝试编写一个程序,接受一个数组,把这个数组中最长的平台找出来。在上面的例子中3,3,3就是该数组中最长的平台。 要求: 1、使用的变量越少越好。 2、把数组的元素每一个都只查一次就得到结果。 3、程序的语句也要越少约好。 我尝试写了这个问题的解法,程序还有待优化(还有新的想法,先给出比较直观的解法) import java. ...
LCS:就是最长公共子序列。其中子序列(Subsequence)的概念不同于字符串中的子串。它是一个不一定连续但按顺序取自字符串X的字符序列。例如字符串“AAAG”就是字符串“CGATAATTGAGA”的一个子序列。字符串的相似问题可以通过求解两个字符串之间的最长公共子序列(LCS)来解决。编写一个程序来实现找一个字符串的最大公共子序列。
请详细叙述一下Java异常与错误之间的区别。 Java中的异常分为两大类:运行时异常和受检查异常。其中运行时异常是不被Java编译器检查的,一般都是些导致程序无法正常运行的异常。而受检查异常是指除了运行时异常之外的所有异常,这些异常可以在try/catch语句块中捕获并且在编译时是受编译器检查的。 而Error类及其子类表示程序本身无法修复的错误,它和运行时异常的相同之处是:Java编译器都不会去检查它们,当程序运行时出现它们的时候,都会终止正在执行的程序。 但两者不同的是:Error类及其子类表示的错误通常是由Java虚拟机抛出的,在JDK中已经预定义好的一些错误类型,比如内存溢出(Out ...
Global site tag (gtag.js) - Google Analytics