j2ee面试宝典翻译(1)
q1:给出一些使用Java的理由?
a1:java是一个有趣的编程语言,让我找出一些理由来:
- 内建的多线程机制、套接字、内存管理(自动垃圾回收)
- 面向对象
- 跨平台
- 通过对标准API的扩展来支持基于web的应用程序(applet、servlet、jsp),分布式应用程序(socket、RMI、EJB)和网络协议(HTTP、JRMP等)。
q2:java平台和别的软件平台有什么主要区别?
a2:java平台是纯粹的软件平台,运行在别的基于硬件的平台之上(如UNIX、NT等)。
java平台由两部分组成:
- java虚拟机(JVM):是硬件平台上的一个软件,字节码(class文件)是JVM的机器语言。
- java Application Programing Interface(API)——系列用Java语言编写的class文件,它们运行在JVM上。
q3:C++和Java有哪些区别?
a3:虽然Java和C++都使用相近的语法而且都是面向对象的编程语言,但是:
- Java不支持指针。指针天生较为教滑和令人讨厌。
- Java不支持多重继承,因为这带来的麻烦比它解决的要多。作为替代,Java支持多接口继承,运行一个类继承(实现)多个来自不同接口的方法签名。多接口继承运行子类对象的行为具备多态性。
- Java不支持析构函数,但是添加了finalize()方法。垃圾回收器在回收对象前会调用其finalize()方法,但是我们并不知道对象何时被回收。我们不应该使用finalize来释放资源,例如文件处理、socket、数据库连接,因为这些资源都很有限,我们并不知道finalize()方法何时被调用。
- Java没有结构体或者联合体,因为传统的数据结构被设计为一个面向对象的框架(Java集合框架)。
q4:Java packages有什么作用?
a4:多个包下可以有同名的类,因此包可以帮助我们解决命名冲突的问题。另外,它可以很好地组织文件。例如 java.io 包与I/O相关而java.net包与网络相关,等等。如果我们将所有的.java文件放在单个包中,随着项目的增大,将会很难管理这些文件。
我们可以通过package来声明类所在的包。package关键字应该是源码中出现的第一个关键字,随后是import语句。默认情况下,java.lang包会被隐式地引入,而其它包都必须显式地引入。
package com.xyz.client ;
import java.io.File;
import java.net.URL;
q5:解释Java类加载器(class loader)?如果你有一个类在一个包里,你需要做什么才能运行它?解释动态类加载?
a5:类加载器是分等级的。当已经运行在JVM中类引用了一个类的名字时,这个类才会被加载到JVM中。那么,第一个类是如何被加载的呢?JVM要加载的第一个类是声明了main()方法并被运行的类。接下来所有被装载的类都是由它引发的——它已经在JVM中并处于运行状态。
一个类装载器创建一个命名空间。所有JVM至少有一个类装载器,被称为原始类加载器或者引导类加载器,它是由C或者C++实现的。除此之外,Java允许用java语言编写的类加载器来加载class文件。通常JVM提供两个这样的非原始类加载器:
- 引导类加载器(Bootstrap)——加载JDK内部的class文件(java.*包),典型地,它加载rt.jar和i18n.jar
- 扩展类加载器(Extensions)——加载JDK扩展路径下的jar包, java.ext.dirs系统变量指定的路径,通常是JRE的lib/ext路径
- 系统类加载器(System)——从系统classpath加载class文件,系统classpath由 java.class.path系统变量决定,它通过CLASSPATH环境变量或者命令行的–classpath / –cp参数指定
类加载器是分层级的,而且采用委托模型。类装载器会先请求其父级类加载器加载类文件,如果父级加载器未能加载,再自己加载。一旦父级加载器已经加载该类,子加载器不会重复加载。子加载器加载的类可访问父加载器加载的类,但是反过来不成立。
Q:在某个package下拥有main()方法的class,你需要做什么才能运行它?
举例来说:你有一个类名为“Pet”在工程文件“c:\myProject”并且包名为“com.xyz.client”,你能用下列方式编译和运行它吗?
package com.xyz.client; public class Pet {
public static void main(String[] args) {
System.out.println("I am found in the classpath");
}
}
To run --》 c:\myProject> java com.xyz.client.Pet
答案是不行!你将会得到这样的异常:“Exception in thread "main" java.lang.-NoClassDefFoundError: com/xyz/client/Pet”.
你需要设置classpath
- 设置操作系统的“CLASSPATH”环境变量,包含工程文件“c:\myProject”
- 设置操作系统的“CLASSPATH”环境变量,包含工程文件“c:\myProject\client.jar”,这个jar包应含有Pet.class类文件。
- 运行命令行提供-cp或者-classpath环境变量:
c:\>java -cp c:/myProject com.xyz.client.Pet
OR
c:\>java -classpath c:/myProject/client.jar com.xyz.client.Pet
Q:解释静态vs动态类加载?
静态类加载 | 动态类加载 |
类的静态加载伴随着Java的new操作符
class MyClass { |
动态加载是在运行期调用类装载功能的一种编程技术。 //static method which returns a Class Class.forName (String className ); 上面的静态方法返回一个和类名关联的Class实例。字符串“className”可以在运行期被动态地提供。不像静态加载,动态加载决定加载Car类文件或者Jeep类文件,是基于属性文件或者其它运行期条件的。一旦类被加载,就可以通过下列方式来创建类的一个实例(就像用new操作符调用一个无参构造器那样!) class.newInstance () ; //A non-static method, which creates an instance of a |
NoClassDefFoundException异常将被抛出,如果用new操作符使用一个类,但是在运行期系统并未找到这个被引用的类。 | ClassNotFoundException将会被抛出,如果程序试图使用下列方式之一,通过字符串类名加载一个类,而这个类未被定义的话。
The forName(..) method in class - Class. |
Q:静态初始化和静态块是什么?
A:当一个类被加载的时候,其静态块就会被执行,这会先于构造器的执行。正如其名,它用于初始化静态成员。
public class StaticInitializer {
public static final int A = 5;
public static final int B; //note that it is not Æ public static final int B = null ;
//note that since B is final , it can be initialized only once. //Static initializer block, which is executed only once when the class is loaded. static {
if(A == 5)
B = 10;
else
B = 5;
} public StaticInitializer(){} //constructor is called only after static initializer block
}
下列代码将会输出:A=5, B=10
public class Test {
System.out.println("A =" + StaticInitializer.A + ", B =" + StaticInitializer.B);
}
j2ee面试宝典翻译(1)的更多相关文章
- j2ee面试宝典翻译(3) j2ee job interview companion
Q9:如何让表达“是一个”和“有一个”关系?或者请解释下“继承”和“组合”.组合和聚合之间有什么区别? A9:“是一个”的关系表示继承而“有一个”的关系是表示组合.继承和组合都允许你将子对象放入新类中 ...
- Java面试宝典2013版(超长版)
一. Java基础部分......................................................................................... ...
- Java面试宝典2014版
一. Java基础部分......................................................................................... ...
- Java 面试宝典-2017
http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017 Java面试宝典2017版 一. Java基础部分........... ...
- Java面试宝典-2017
Java面试宝典2017版 一. Java基础部分........................................................................... ...
- Java面试宝典2018
转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...
- java 软件开发面试宝典
一. Java 基础部分........................................................................................ ...
- 最全的Java面试宝典
一. 前言部分 从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴 ...
- 【转】Java面试宝典2015版(绝对值得收藏超长版)(一)
(转自:http://mp.weixin.qq.com/s?__biz=MjM5MTM0NjQ2MQ==&mid=206619070&idx=1&sn=fcb21001d442 ...
随机推荐
- 关于ios的autoLayout的一些简单介绍以及使用方法
一.autoLayout的用途: 主要用于屏幕适配,尤其是出现了iphone6,plus之后. 二.怎么简单的用autoLayout呢? 点击左一,可以看到: 点击左二: 基本上要想autolayou ...
- Gimp教程:多图层多渐变的文字效果
这个教程是我在国外的视频网站上学的,制作这个教程也很久了,今天在网盘翻看到这个截图版本,正好整理到博客,方便管理.记得当时花了一下午的时间来边做边截图修改制作,个人觉得这个教程还是很好的,原作者很有创 ...
- Mac OSX操作系统安装和配置Zend Server 6教程(4)
在前三节中,完成了安装和配置,最后是登录后台,并设置权限.Zend server后台登录默认端口是10081.浏览器中的的地址应输入http://localhost:10081/ZendServer. ...
- C# File类的操作
原文:C# File类的操作 File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件.File类方法的参 ...
- mysql基础之存储引擎
原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量 ...
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...
- NET Framework 4.5新特性 数据库的连接加密保护。
NET Framework 4.5新特性 (一) 数据库的连接加密保护. NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本. 一旦使用这 ...
- c#下载文件案例
public static void HttpDown(string fileName, System.Web.UI.Page p_Page,string floder) { string path ...
- CRM2011 concurrency问题及解决方案
CRM2011对删除和添加操作会自动做判断,比如A打开纪录x,B也打开纪录x,然后B删除了纪录x,A去更新的话就会有提示.更新的话是后者覆盖前者,比如A打开纪录x,B打开纪录x,然后B把记录x中的字段 ...
- C#事件与委托的区别
C#事件与委托的区别 1. 委托 事件是利用委托来定义的,因此先解释委托.委托是一个类,它与其他类如int,string等没有本质区别,int代表的是所有的整形,而string代表的是字符串,委托则代 ...