14 12
发新话题
打印

Java初学者经书

Java初学者经书

我的书写习惯:
注意用红色
标题用蓝色
关键字用绿色
例子用橄榄色


1、java 2 SDK 的版本分类:
J2ME:(Java 2, Micro Edition)一种以广泛的消费性产品为目的的高度优化的Java运行环境,包括讯呼机、移动电话、可视电话、数字机顶盒等...
它是致力于消费产品和嵌入式设备的开发人员的最佳选择。
J2SE:(Java 2, Standard Edition)是SUN公司针对桌面开发以及低端商务计算解决方案而开发的版本。
J2EE:(Java 2, Enterprise Edition)是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE的基础是J2SE,J2EE不仅巩固了标准版中的许多优点,同时还提供了对E**、Servlets、JSP以及XML技术的全面支持。

2、Java开发环境:
Java是面向对象的编成语言,JDK作为其开发包。可以在Web上开发相关的Web应用;也可以开发各种类型的桌面程序。前者称为小程序Applet;后者称为应用程序Application。
Java开发工具包JDK(Java Development Kit)是编写Java程序的基础,它集成了编译Java源程序的编译器、运行Java类文件的解释器等必备工具。

3、获得JDK
目前SUN公司发布的JDK版本最高为1.5,所对应的平台有LInux、Solaris和Windows等等,下面的链接是JDK1.4.2的下载页面:
http://java.sun.com/j2se/1.4.2/download.html
点击Download J2SE SDK,接受协议并下载
Windows Offline Installation, Multi-language 即可,官方服务器有点慢,多等一会儿吧。

4、配置Java开发环境
首先,安装。假设在D:\jdk14,不多说了。
其次,配置PATH环境变量。
1.对于Windows 95/98:
打开C:\的AOTUEXEC.BAT文件,找到PATH并在其最后加上
“;d:\jdk14\bin”。如果没有PATH,则加上“PATH d:\jdk14\bin;.”。重起后即可。
2.对于Windows NT/2000/XP:
“我的电脑”->“属性”->“高级”->“环境变量”->找到Path->
在最后加入“;d:\jdk14\bin”。如果没有,则“新建”PATH,其值为:“d:\jdk14\bin”。
检验配置是否正确:进入DOS命令提示符,在任意目录输入“javac”并回车,如果出现该命令的使用方法(usage ...)。
恭喜你!我们可以进入Java的编程世界了。

5、源程序的编译与运行
JDK的编译与运行需要在DOS命令提示符下使用。

编译器(javac.exe):
格式:javac [参数] 源程序
如:编译当前目录下Hello.java文件,并且把生成的类文件也放到当前目录
javac Hello.java

通常情况下,如果 CLASSPATH 设置正确,我们只需要使用不带参数的 javac 即可很好的编译 Java 程序,但是,为了方便以见,这里还是要介绍一些参数:

-classpath <path> 如果编译时需要用到的 Java 类文件不在 CLASSPATH 指定的路径中,编译时可以指定 -classpath 参数指定可能用到类所在的目录。如 (假设 Java 运行类放在 d:\javacode 目录下):
javac -classpath d:\javacode Hello.java

-d <directory> 使用 -d 参数可以指定编译生成的 .class 文件输入到哪一个目录。通常情况下,javac 把生成的 .class 文件放在 .java 文件所在的目录中。如果使用 -d 参数,则可以指定 javac 将生成的 .class 文件入在其它目录中,如下例将生成的 HelloJava.class 输出到 d:\myclass 中
javac -d :\myclass HelloJava.java

常用的 javac 参数就介绍这两个。如果你需要了解其它参数的用法和作用,可以运行不带任何参数的 javac。它将打印出 javac 的用法文档。

解释器(java.exe):
格式:java [参数] 类名 [程序参数]
如果运行当前目录中Hello类:java Hello 即可,而不是java Hello.class

-classpath <path> 如果编译时需要用到的 Java 类文件不在 CLASSPATH 指定的路径中,编译时可以指定 -classpath 参数指定可能用到类所在的目录。如 (假设 Java 运行类放在 d:\javacode 目录下):
java -classpath d:\javacode Hello.java

如果你需要了解其它参数的用法和作用,可以运行不带任何参数的 java。它将打印出 java 的用法文档。

6、关于CLASSPATH环境变量
它是用来设置“类路径”的,提供给JVM的类装载器到哪里寻找第三方提供的类和用户定义的类。
它的配置方法和PATH环境变量的方法一样,只是该成CLASSPATH。
例如:在d:\javacode目录写程序,那么,就可以把CLASSPATH设置成“.;d:\javacode”,以后,无论在哪个目录下都可以运行自己所写的类了。
注意:每个类目录用“;”分隔,分号前面的那个句点“.”很重要,它代表“当前目录”,如果没有它,JVM只到“d:\javacode”里去找类,而当前目录就被忽略了。

有的朋友运行程序时,出现:
Exception in thread "main" java.lang.NoClassDefFoundError:
一般就是JVM没有找到所使用的类。

当然,第三方提供的“.jar”文件也是在这里设置的,
例如:在CLASSPATH里写上这么一句:“;d:\jxta\lib\jxta.jar”,
那么,在编程过程中就可以使用jxta.jar包中的API了。至于JXTA是Java实现P2P编程的一个平台。

7、关于JRE
JRE 是Java运行环境 (Java Runtime Enviroment) 的缩写。它是JDK的基础,在安装JDK时就已经安装了它。如果只想运行Java程序,而不编译Java程序的话,安装JRE就足够了。

8、关于Java方面的书
买书要慎重。现在市面上的关于Java的书已经很多了,
我推荐一些:
初级读物:
《21天学通Java2第三版》
《Java 2编程详解》
《Java 2从入门到精通》
高级读物:
《Thinking in Java》
《java与模式》
……
作为入门Java来说,主要是学习“面向对象的概念”和“Java编程的思维方式”,至于类的使用可以查看Java文档资料。

9、Sun的资料
如果English说得过去,可以看Sun的Java文档,那里有每个类的详细说明。
http://java.sun.com/j2se/1.4.2/download.html
中的J2SE 1.4.2 Documentation

同时,Sun还提供了Java从初级到高级的一系列“书籍”:
1、The Java Tutorial
Java指南,讲得很具体。
2、The JFC Swing Tutorial, Second Edition: A Guide to Constructing   GUIs
3、The Java Tutorial Continued: The Rest of the JDK

可以在这里在线阅读,也可以下载(就在右边)。

10、开发Java的常用工具
1. 记事本+JDK:原始社会,不可思议的组合。
2. Jcreator+JDK:小巧伶俐的组合,提供自动补全功能,强力推荐。如果安装Jcreator后无法编译程序,就手动配置一下[Configure]-->[Options]-->[JDK Profiles]-->[New]选择JDK的安装目录。要使用自己的类,可以使用[Edit...]功能在已有的JDK中添加类,其功能类似设置CLASSPATH。(其中add Path是添加路径、add Archive来添加一个.jar的文件)
3. netBeans:Sun提供的IDE 环境,要求配置很高,反正我的机器跑得很慢。
4. **uilder:地球人都知道。
5. Eclipse:可以通过插件实现意想不到的功能。
没有你的日子里,我憔悴如一个陌生的过客,存在和不存在都那么简单

TOP

请问这里的大学生有没有懂JAVA的高手(3人团队也可以),最好是懂围棋的!技术全面的程序员!为迎接手机上网的3G时代的即将到来,本人准备做一个手机上网的围棋专业网站! 域名已经有了 eweiqi.mobi 请参考EWEIQI.COM  就差技术~
想创业的有技术的个人和小团体. 请加我QQ:53497247
我出资金,你出技术,当然有一定的报酬!
自认为,水平最高的朋友请加我QQ谈 然后面谈,

本人是威海本地人~   请放心~

TOP

我正想借寒假的机会补补Java呢,看了这片贴子,有帮助。
道不行,乘桴浮于海。

TOP

呵呵 JAVA 资料我很多啊 可是我不知道怎么上传  FTP也上不了了

学习Java的30个基本概念


  在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念.

  Java概述:
  目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载计算机的开发.Java与其他语言所不同的是程序运行时提供了平台的独立性,称许可以在windows,solaris,linux其他操作系统上使用完全相同的代码.Java的语法与C++语法类似,C++/C程序员很容易掌握,而且Java是完全的彻底的面向对象的,其中提出了很好的GC(Garbage Collector)垃圾处理机制,防止内存溢出.
  Java的白皮书为我们提出了Java语言的11个关键特性.
  (1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb.
  (2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet.
  (3)OO:面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型.
  (4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能性。
  (5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好.
    (6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行.   
    (7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好.
  (8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一
  (9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的.
  基本概念:
  1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对对象数据封装,很大限度上提高复用率.
  2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)
  3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)
  4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍.
  5.对象的3个主要特性
  behavior---说明这个对象能做什么.
  state---当对象施加方法时对象的反映.
  identity---与其他相似行为对象的区分标志.
  每个对象有唯一的indentity 而这3者之间相互影响.
6.类之间的关系:
  use-a :依赖关系
  has-a :聚合关系
  is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中)
  7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化.
  例:Data类的构造器叫Data
  new Data()---构造一个新对象,且初始化当前时间.
  Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用.
  构造器特点:构造器可以有0个,一个或多个参数
  构造器和类有相同的名字
  一个类可以有多个构造器
  构造器没有返回值
  构造器总是和new运算符一起使用.
  8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法.
  9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内.
  10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段.
  11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类).
  12.多态:在java中,对象变量是多态的.而java中不支持多重继承.
13.动态绑定:调用对象方法的机制.
  (1)编译器检查对象声明的类型和方法名.
  (2)编译器检查方法调用的参数类型.
  (3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法.
  (4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本.
  (5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码.
  14.final类:为防止他人从你的类上派生新类,此类是不可扩展的.
  15.动态调用比静态调用花费的时间要长,
  16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract例: public abstract string getDescripition
  17.Java中的每一个类都是从Object类扩展而来的.
  18.Object类中的equal和toString方法.equal用于测试一个对象是否同另一个对象相等.toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示.(toString 方法是一个很重要的方法)
  19.通用编程:任何类类型的所有值都可以同Object类性的变量来代替.
  20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小.
  21.class类 Object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类.
  22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具.能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大.
  1.在运行时分析类的能力.
  2.在运行时探察类的对象.
  3.实现通用数组操纵代码.
  4.提供方法对象.
  而此机制主要针对是工具者而不是应用及程序.
  反射机制中的最重要的部分是允许你检查类的结构.用到的API有:
  java.lang.reflect.Field 返回字段.
  java.reflect.Method 返回方法.
  java.lang.reflect.Constructor 返回参数.
  方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案.
    23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface.
  24.接口不是一个类,而是对符合接口要求的类的一套规范.若实现一个接口需要2个步骤:
  1.声明类需要实现的指定接口.
  2.提供接口中的所有方法的定义.
  声明一个类实现一个接口需要使用implements 关键字class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口,但是可以声明一个变量.
  25.一个类只有一个超类,但一个类能实现多个接口.Java中的一个重要接口Cloneable
  26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法.例:ActionListener 接口监听.
  类似的API有:java.swing.JOptionPane
        java.swing.Timer
        java.awt.Tookit
  27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它.
  28.内部类:一个内部类的定义是定义在另一个内部的类
  原因是:1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据
  2.对于同一个包中的其他类来说,内部类能够隐藏起来.
  3.匿名内部类可以很方便的定义回调.
  4.使用内部类可以非常方便的编写事件驱动程序.
  29.代理类(proxy):1.指定接口要求所有代码 2.object类定义的所有的方法(toString、equals)
  30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型.
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

1.Java的简单类型及其封装器类

⑴Java简单类型与封装类

我们知道,Java语言是典型的支持面向对象的程序语言,但考虑到有些基本数据类型的结构简单,占内存小且存取速度快等优点,Java依然提供了对这些非面向对象的简单数据类型的支持。当然,Java在提供大量的其它类时,也提供了与简单数据类型对应的封装类,于是,Java中就有了诸如int和Integer(float和Float、double和Double……)的不同的数据类型。

Java语言的数据类型有两大类:一类是简单类型,也称主要类型(Primitive),另一类是引用类型(Reference)。简单类型变量中存储的是具体的值,而引用类型的变量中存储的是对象的引用。

Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。

下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。



表 Java中的简单类型



简单类型                  二进制位数
boolean                       1
byte                          8
char                          16
short                         16
int                           32
long                          64
float                         32
double                        64
void                          --

封装器类
Boolean
Byte
Character
Short
Integer
Long
Float
Double
Void




⑵为什么使用封装类

以int和Integer为例来说,虽然从本质上它们都代表一个32位的整数,但它们却是不同的数据类型。事实上,Java中直接使用的整数都为int(就int和Integer而言),只有当数据必须作为对象的身份出现时,才必须用int对应的封装器Intege将整数值封装成对象。

例如:为给java.util包中的Vector添加一个整数,就必须如下将该整数值封装在一个Integer实例中:

Vector v=new Vector();

int k=121;

v.addElemt(new Integer(k));

另外,Integer作为int对应的封装器类,提供了许多的方法,比如:Integer的构造方法、Integer向其它各种数值类型的转换方法等等,而这些是int类型数据所没有的。



2.简单数据类型之间的转换

简单类型数据间的转换,有两种方式:自动转换和强制转换,通常发生在表达式中或方法的参数传递时。

⑴自动转换

具体地讲,当一个较“小”数据与一个较“大”的数据一起运算时,系统将自动将“小”数据转换成“大”数据,再进行运算。而在方法调用时,实际参数较“小”,而被调用的方法的形式参数数据又较“大”时(若有匹配的,当然会直接调用匹配的方法),系统也将自动将“小”数据转换成“大”数据,再进行方法的调用,自然,对于多个同名的重载方法,会转换成最“接近”的“大”数据并进行调用。

这些类型由“小”到“大”分别为 (byte,short,char)--int--long--float—double。这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。

请看下面的示例:



①下面的语句可以在Java中直接通过:

byte b;

int i=b;

long l=b;

float f=b;

double d=b;



②如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如

char c='c';

int i=c;

System.out.println("output:"+i);



输出:output:99;



③对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。

short i=99 ;

char c=(char)i;

System.out.println("output:"+c);



输出:output:c;



④对象多态中若有方法:

f(byte x){……};

f(short x) {……};

f(int x) {……};

f(long x) {……};

f(float x) {……};

f(double x) {……};

又有:char y=’A’;那么,语句f(y)会调用哪一个方法呢?答案是:f(int x) {……}方法,因为它的形参比实参“大”且是最“接近”的。



而对于方法:

f(float x) {……};

f(double x) {……};

又有:long y=123L;那么,语句f(y)调用的方法则是f(float x) {……}。因为long和float类型位数是相等的。



⑵强制转换

将“大”数据转换为“小”数据时,你可以使用强制类型转换。即你必须采用下面这种语句格式:

int n=(int)3.14159/2;

可以想象,这种转换肯定可能会导致溢出或精度的下降。



注:

①当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。

byte b;

    b=3;

    b=(byte)(b*3);//必须声明byte。

②带小数的变量默认为double类型。

float f;

    f=1.3F;//必须声明F。



⑶包装类过渡类型转换

一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:

①当希望把float型转换为double型时:

  float f1=100.00f;

  Float F1=new Float(f1);

  double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法



②当希望把double型转换为int型时:

   double d1=100.00;

   Double D1=new Double(d1);

   int i1=D1.intValue();

   

简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)

而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。



3.字符串与其它类型间的转换

⑴其它类型向字符串的转换

①调用类的串转换方法:X.toString();

②自动转换:X + "";

③使用String的方法:String.valueOf(X);



⑵字符串作为值,向其它类型的转换

①先转换成相应的封装器实例,再调用对应的方法转换成其它类型

例如,字符中“32.1”转换double型的值的格式为:new Float("32.1").doubleValue()。也可以用:Double.valueOf("32.1").doubleValue()



②静态parseXXX方法

String s = "1";

byte b = Byte.parseByte( s );

short t = Short.parseShort( s );

int i = Integer.parseInt( s );

long l = Long.parseLong( s );

Float f = Float.parseFloat( s );

Double d = Double.parseDouble( s );



③Character的getNumericValue(char ch)方法

具体可查阅api。



4.Date类与其它数据类型的相互转换

整型和Date类之间并不存在直接的对应关系,只是你可以使用int型为分别表示年、月、日、时、分、秒,这样就在两者之间建立了一个对应关系,在作这种转换时,你可以使用Date类构造函数的三种形式:

①Date(int year, int month, int date):以int型表示年、月、日

②Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、时、分

③Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、时、分、秒

在长整型和Date类之间有一个很有趣的对应关系,就是将一个时间表示为距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数。对于这种对应关系,Date类也有其相应的构造函数:Date(long date)。

获取Date类中的年、月、日、时、分、秒以及星期你可以使用Date类的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以将其理解为将Date类转换成int。

而Date类的getTime()方法可以得到我们前面所说的一个时间对应的长整型数,与包装类一样,Date类也有一个toString()方法可以将其转换为String类。

有时我们希望得到Date的特定格式,例如20020324,我们可以使用以下方法,首先在文件开始引入,

import java.text.SimpleDateFormat;

import java.util.*;

java.util.Date date = new java.util.Date();



//如果希望得到YYYYMMDD的格式

SimpleDateFormat sy1=new SimpleDateFormat("YYYYMMDD");

String dateFormat=sy1.format(date);



//如果希望分开得到年,月,日

SimpleDateFormat sy=new SimpleDateFormat("yyyy");

SimpleDateFormat sm=new SimpleDateFormat("MM");

SimpleDateFormat sd=new SimpleDateFormat("dd");

String syear=sy.format(date);

String smon=sm.format(date);

String sday=sd.format(date);
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存


在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为改变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。
在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。
而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。
但是在写程序的时候,可以人为的控制。
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

小结:对象变量保留对对象的引用,而不是对象
  T面总结7蕴合的阶a原理、即非基本类型的变量保留对对象的引用*说明它们保留T对
,的地址
  o卢明一个对象变量并没齐创建相应的对象。
  ●利用“;;”运算符比较两个对象变量*实b上/o是比较变量中保留削B针,6qt是对象
    的内容。日此,通常应定义一个用于kL较约叫u山〔)方法;
●作为参数传递的对朗1A的副本将压入堆栈中,原始对象中的字段囚6可口被方法改变
  或更新,但T能让原始引月指向一个c目的对象j
o易于6明一个类,其中关本身的实例又作为它的字段。例如,一个体接表包合另一个键
  接表.一个二又树包合两个子二又树c如果声明一个字段Foo,它将是一个对Foo的引用。
●因为一个引用变量可“自动撤销引用*K得到对象中字段的自客,因此,很容易看出是
  对指针进行改值和比较6不是对象G
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

这是零星的整理出来的一些学习资料 集我这半年学习之努力啊   呵呵

再整点SCJP题目给大家看吧 呵呵~~~
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

SCJP试题集及解析

1.      Which of the following range of short is correct?
A. -27 -- 27-1
B. 0 – 216-1
C. -215 – 215-1
D. -231 – 231-1
翻译:下面哪些是short型的取值范围。
答案::C
解析:短整型的数据类型的长度是16 bits,有符号。另外需要说明的是java中所有的整(Integral)数(包括byte,short,int,long)全是有符号的。
2.      Which declarations of identifiers are legal?
A. $persons
B. TwoUsers
C. *point
D. this
E. _endline
翻译:下面哪些是合法的标识符。
答案:A,B,E
解析:Java的标识符可以以一个Unicode字符,下滑线(_),美元符($)开始,后续字符可以是前面的符号和数字,没有长度限制,大小写敏感,不能是保留字。
3.      Which statement of assigning a long type variable to a hexadecimal value is correct?
A. long number = 345L;
B. long number = 0345;
C. long number = 0345L;
D. long number = 0x345L
翻译:哪些是将一个十六进制值赋值给一个long型变量。
答案D
解析:十六进制数以0x开头,long型数以L(大小写均可,一般使用大写,因为小写的l和数字1不易区分)。
4.      Which of the following fragments might cause errors?
A. String s = "Gone with the wind";
String t = " good ";
String k = s + t;
B. String s = "Gone with the wind";
String t;
t = s[3] + "one";

C. String s = "Gone with the wind";
String standard = s.toUpperCase();

D. String s = "home directory";
String t = s - "directory";

翻译:下面的哪些程序片断可能导致错误。
答案B,D
解析 A:String类型可以直接使用+进行连接运算。
B:String是一种Object,而不是简单的字符数组,不能使用下标运算符取其值的某个元素,错误。
C:toUpperCase()方法是String对象的一个方法,作用是将字符串的内容全部转换为大写并返回转换后的结果(String类型)。
D:String类型不能进行减(-)运算,错误。
5.      Which are syntactically valid statement at// point x?
class Person {
private int a;
public int change(int m){ return m; }
}
public class Teacher extends Person {
public int b;
public static void main(String arg[]){
Person p = new Person();
Teacher t = new Teacher();
int i;
// point x
}
}
A. i = m;
B. i = b;
C. i = p.a;
D. i = p.change(30);
E. i = t.b.
翻译:在// point x处的哪些申明是句法上合法的。
答案D,E
解析 A:m没有被申明过,不能使用。
B:虽然b是类Teacher的public成员变量,但是在静态方法中不能使用类中的非静态成员。
C:a是类Person的private成员,在类外不能直接引用。
D:change(int m)方法是public方法,并且返回一个int型值,可以通过类的实例变量p引用并赋值给一个int型变量。
E:b是类Teacher的public成员变量,且是int型,可以通过类的实例变量t引用并赋值给一个int型变量。

6. Which layout manager is used when the frame is resized the buttons's position in the Frame might be changed?
A. BorderLayout
B. FlowLayout
C. CardLayout
D. GridLayout
翻译:当Frame的大小被改变时Frame中的按钮的位置可能被改变时使用的哪一个布局管理器。
答案:B
解析 A:该布局管理器将容器划分为五个部分,容器大小的改变不会影响其中的组件的位置而是影响他们的大小。
B:该布局管理器根据放入其中的组件的最合适大小调整组件的位置,根据组件放入的顺序安排,一行不能容纳时放入下一行,因此容器的大小改变可能改变组件的位置。
C:该布局管理器显示放入该容器的当前页中的组件,一次显示一个,容器大小的改变不能影响其中组件的位置。
D:该布局管理器将容器划分为固定的网格,组件加入后占据一个单元,各组件的相对位置不会因为容器的大小变化而变化,改变的只是组件的大小。
6.      Given the following code fragment:
1) public void create() {
2} Vector myVect;
3} myVect = new Vector();
4} }
Which of the following statements are true?
A. The declaration on line 2 does not allocate memory space for the variable myVect.
B. The declaration on line 2 allocates memory space for a reference to a Vector object.
C. The statement on line 2 creates an object of class Vector.
D. The statement on line 3 creates an object of class Vector.
E. The statement on line 3 allocates memory space for an object of class Vector
翻译:
给出下面的代码片断。。。下面的哪些陈述为true(真)?
A. 第二行的声明不会为变量myVect分配内存空间。
B. 第二行的声明分配一个到Vector对象的引用的内存空间。
C. 第二行语句创建一个Vector类对象。
D. 第三行语句创建一个Vector类对象。
E. 第三行语句为一个Vector类对象分配内存空间。
答案A,D,E
解析 SL-275中指出:要为一个新对象分配空间必须执行new Xxx()调用,new调用执行以下的操作:
1.为新对象分配空间并将其成员初始化为0或者null。
2.执行类体中的初始化。(例如在类中有一个成员声明int a=10;在第一步后a=0 ,执行到第二步后a=10)
3.执行构造函数。
4.变量被分配为一个到内存堆中的新对象的引用。

8. Which of the following answer is correct to express the value 8 in octal number?
A. 010
B. 0x10
C. 08
D. 0x8
翻译:下面的哪些答案可以用以表示八进制值8。
答案:A
解析 八进制值以0开头,以0x开头的为十六进制值,八进制中不能出现数字8,最大只有7。
9. Which are not Java keywords?
A. TRUE
B. sizeof
C. const
D. super
E. void

翻译:哪些不是Java关键字。
答案A,B
解析 A:不是,Java中有true,但是这也不是关键字而是字面量(literal)。
B:不是,Java中不需要这个操作符,所有的类型(原始类型)的大小都是固定的。
C、D、E都是,需要说明的是const是java中未被使用的关键字。
10. Which of the following statements are true?
A. The equals() method determines if reference values refer to the same object.
B. The == operator determines if the contents and type of two separate objects match.
C. The equals() method returns true only when the contents of two objects match.
D. The class File overrides equals() to return true if the contents and type of two separate objects match.
翻译:下面的哪些叙述为真。A. equals()方法判定引用值是否指向同一对象。
B. == 操作符判定两个分立的对象的内容和类型是否一致。
C. equals()方法只有在两个对象的内容一致时返回true。
D. 类File重写方法equals()在两个分立的对象的内容和类型一致时返回true。
答案A,D
解析  严格来说这个问题的答案是不确定的,因为equals()方法是可以被重载的,但是按照java语言的本意来说:如果没有重写(override)新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是java推荐的是使用equals()方法来判断两个对象的内容是否一样,就像String类的equals()方法所做的那样:判定两个String对象的内容是否相同,而==操作符返回true的唯一条件是两个变量指向同一对象。从这个意义上来说选择给定的答案。从更严格的意义来说正确答案应该只有D。
11. Which statements about inheritance are true?
A. In Java programming language only allows single inheritance.
B. In Java programming language allows a class to implement only one
interface.
C. In Java programming language a class cannot extend a class and implement
a interface together.
D. In Java programming language single inheritance makes code more
reliable.
翻译:下面关于继承的哪些叙述是正确的。
A.在java中只允许单一继承。
B.在java中一个类只能实现一个接口。
C.在java中一个类不能同时继承一个类和实现一个接口。
D.java的单一继承使代码更可靠。
答案A,D
解析  在java中一个类只能有一个直接父类,但是可以实现多个接口,在继承的同时可以实现接口,之所以取消多继承的原因是多继承使得代码产生很多问题,而使用单一继承则可以使代码更可靠。


12.
1) class Person {
2} public void printValue(int i, int j) {/*…*/ }
3} public void printValue(int i){/*...*/ }
4} }
5) public class Teacher extends Person {
6} public void printValue() {/*...*/ }
7} public void printValue(int i) {/*...*/}
8} public static void main(String args[]){
9} Person t = new Teacher();
10} t.printValue(10);
11} }
12} }

Which method will the statement on line 10 call?
A. on line 2
B. on line 3
C. on line 6
D. on line 7
翻译:第十行的声明将调用哪些方法。
答案:D
解析  变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print(10)将调用t实际指向的Teacher类的对应方法。在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。
13. Which are not Java primitive types?
A. short
B. Boolean
C. unit
D. float
翻译:下面哪些不是java的原始数据类型。
答案:B,C
解析  Java的原始数据类型一共就八个,分别是:byte,short,int,long,boolean,char,float,double。注意这些是大小写敏感的,而Boolean是booelan的封装类(wrapper class)。
14. Use the operators "<<", ">>", which statements are true?
A. 0000 0100 0000 0000 0000 0000 0000 0000<<5 gives
1000 0000 0000 0000 0000 0000 0000 0000
B. 0000 0100 0000 0000 0000 0000 0000 0000<<5 gives
1111 1100 0000 0000 0000 0000 0000 0000
C. 1100 0000 0000 0000 0000 0000 0000 0000>>5 gives
1111 1110 0000 0000 0000 0000 0000 0000
D. 1100 0000 0000 0000 0000 0000 0000 0000>>5 gives
0000 0110 0000 0000 0000 0000 0000 0000
翻译:使用"<<"和 ">>"操作符的哪些陈述是对的。
答案A,C
解析  Java的移位操作符一共有三种,分别是”>>”,”>>>”,”<<”,执行的操作分别是有符号右移,无符号右移,左移,有符号右移的意思是说移入的最高位和原最高符号位相同,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃。移位操作符另一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模,a>>64==a;还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。
15. Which of the following range of int is correct?
A. -27 – 27-1
B. 0 – 232-1
C. ?215 – 215-1
D. ?231 -- 231-1
翻译:int的取值范围是哪个。
答案D
解析  int型是32位的。参看第一题的论述。
16. Which keyword should be used to enable interaction with the lock of an
object? The flag allows exclusive access to that object.
A. transient
B. synchronized
C. serialize
D. static
翻译:下面的哪些关键字通常用来对对象的加锁,该标记使得对对象的访问是排他的
答案:B
解析   由于java是多线程的语言,多个线程可以”同时”访问同一数据区,而在处理某些数据时不希望其它的线程修改那些数据的值或者某些操作是不可打断的,要做到这个,可以使用synchronized关键字声明这一点。
17. Which is the return type of the method main()?
A. int
B. void
C. boolean
D. static
翻译:main()方法的返回类型是什么?
答案:B
解析 java中,程序运行的入口就是main()方法,它必须是这样的形式:public static void main(String args[])。但是严格来讲这个题目的答案还可以加上a和c,因为并没有限定是程序入口的main()方法,而main()方法是可以重载的。一般意义上的main()当然就是指我们刚开始所说的main()方法了。
18. Given the following code:
if (x>0) { System.out.println("first"); }
else if (x>-3) { System.out.println("second"); }
else { System.out.println("third"); }
Which range of x value would print the string "second"?
A. x > 0
B. x > -3
C. x <= -3
D. x <= 0 & x > -3
翻译:给出下面的代码,…,x的取值在什么范围内时将打印字符串"second"。
答案:D
解析x>0时打印"first",x>-3&&x<=0时打印"second",x<=-3时打印"third"。
这个题目没有什么难的,只要理解if语句的语法就可以了。
19. Given the following expression about TextField which use a proportional
pitch font.
TextField t = new TextField("they are good",40);
Which statement is true?
A. The displayed string can use multiple fonts.
B. The maximum number of characters in a line will be 40.
C. The displayed width is exactly 40 characters.
D. The user can edit the characters.
翻译:给出以下关于一个使用适当的字符间距的字体的TextField的表达式。
…哪些叙述是对的?
A. 被显示的字符串可以使用多种字体。
B. 一行中最大的字符数是40
C. 显示的宽度正好是40个字符宽。
D. 用户可以编辑字符。
答案D
解析  TextField的该种形式的构造函数来说,前一个参数是文本域中初始的字符串的显示值,而后一个是推荐的显示宽度,以列数表示,在构造文本域的时候会将这个大小设置为最佳大小,如果容器的限制使得文本域不能显示这么多也没有办法,一般来说是比这个大小大的,而且即使宽度很小,你也可以在文本域的一行中输入很长的字符串,只有你不使用回车,在超过显示宽度后文本域会自动出现水平滚动条(没有被设置为关闭,缺省是不关闭的),而文本域的缺省编辑方式是可编辑的,一个文本域只能使用一种字体,这个字体可以在运行的过程中动态的改变,但是文本域中的所有字符串都将使用这个字体显示。
20. Which statements about the garbage collection are true?
A. The program developer must create a thread to be responsible for free
the memory.
B. The garbage collection will check for and free memory no longer needed.
C. The garbage collection allow the program developer to explicity and
immediately free the memory.
D. The garbage collection can free the memory used java object at expect
time.
翻译:关于垃圾收集的哪些叙述是对的。
A. 程序开发者必须自己创建一个线程进行内存释放的工作。
B. 垃圾收集将检查并释放不再使用的内存。
C. 垃圾收集允许程序开发者明确指定并立即释放该内存。
D. 垃圾收集能够在期望的时间释放被java对象使用的内存。
答案:B
解析  JAVA将内存分配和释放的工组交给了自己,程序员不必做这些工作,它提供一个系统级的线程跟踪每个内存的分配,在JVM的空闲处理中,垃圾收集线程将检查和释放不再使用的内存(即可以被释放的内存)。垃圾收集的过程在java程序的生存期中是自动的,不需要分配和释放内存,也避免了内存泄漏。可以调用System.gc()方法建议(suggest)JVM执行垃圾收集以使得可被释放的内存能立即被使用,当此方法返回的时候,JVM已经做了最大的努力从被丢弃的对象上回收内存空间。程序员不能指定收集哪些内存,一般而言也不用关心这个问题,除非是程序的内存消耗很大,特别是有很多临时对象时可以“建议“进行垃圾收集以提高可用内存。需要指出的是调用System.gc()方法不能保证JVM立即进行垃圾收集,而只能是建议,因为垃圾收集线程的优先级很低(通常是最低的)。


60、Given the following code:
  1) public class Test {
  2} int m, n;
  3} public Test() {}
  4} public Test(int a) { m=a; }
  5} public static void main(String arg[]) {
  6} Test t1,t2;
  7} int j,k;
  8} j=0; k=0;
  9} t1=new Test();
  10} t2=new Test(j,k);
  11} }
    12} }
  Which line would cause one error during compilation?
  A. line 3
  B. line 5
  C. line 6
  D. line 10
   翻译:给出下面的代码:… 在编译时哪行将导致一个错误。
    答案: D
  解析: 第10行的声明调用一个带两个参数的Test的构造方法,而该类没有这样的构造方法。
 59、The method resume() is responsible for resuming which thread's execution?
  A. The thread which is stopped by calling method stop()
  B. The thread which is stopped by calling method sleep()
  C. The thread which is stopped by calling method wait()\
  D. The thread which is stopped by calling method suspend()
 
  题目:方法resume()负责恢复哪些线程的执行。
  A. 通过调用stop()方法而停止的线程。
  B. 通过调用sleep()方法而停止运行的线程。
  C. 通过调用wait()方法而停止运行的线程。
  D. 通过调用suspend()方法而停止运行的线程。
答案:D  
解析:Thread的API文档中的说明是该方法恢复被挂起的(suspended)线程。该方法首先调用该线程的无参的checkAccess() 方法,这可能在当前线程上抛出SecurityException 异常,如果该线程是活着的(alive)但是被挂起(suspend),它被恢复并继续它的执行进程。
57、Which of the following answer is correct to express the value 10 in hexadecimal number?
  A. 0xA
  B. 0x16
  C. 0A
  D. 016
  题目:下面的哪些答案可以正确表示一个十六进制数字10。
    答案:A
  解析:十六进制数以0x开头,以0开头的是八进制数。十六进制表示中的A,B,C,D,E,F依次为10,11,12,13,14,15。
58、Which statements about thread are true?
  A. Once a thread is created, it can star running immediately.
  B. To use the start() method makes a thread runnable, but it does not necessarily start immediately.
  C. When a thread stops running because of pre-emptive, it is placed at the front end of the runnable queue.
  D. A thread may cease to be ready for a variety of reasons.

  题目:有关线程的哪些叙述是对的。
  A. 一旦一个线程被创建,它就立即开始运行。
  B. 使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
  C. 当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
  D. 一个线程可能因为不同的原因停止(cease)并进入就绪状态。
  答案:(bd)
  一个新创建的线程并不是自动的开始运行的,必须调用它的start()方法使之将线程放入可运行态(runnable state),这只是意味着该线程可为JVM的线程调度程序调度而不是意味着它可以立即运行。线程的调度是抢先式的,而不是分时间片式的。具有比当前运行线程高优先级的线程可以使当前线程停止运行而进入就绪状态,不同优先级的线程间是抢先式的,而同级线程间是轮转式的。一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法,而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。
56、Given the uncompleted method:
  1)
  2) { success = connect()
  3} if (success==-1) {  
  4} throw new TimedOutException();
  5} }
  6}}
  TimedOutException is not a RuntimeException. Which can complete the method of declaration when added at line 1?

  A. public void method()
  B. public void method() throws Exception
  C. public void method() throws TimedOutException
  D. public void method() throw TimedOutException
  E. public throw TimedOutException void method()
  题目:给出下面的不完整的方法:…
  答案:(bc)
解析:TimedOutException 不是一个RuntimeException。下面的哪些声明可以被加入第一行完成此方法的声明。
  如果程序在运行的过程中抛出异常,而这个异常又不是RuntimeException或者Error,那么程序必须捕获这个异常进行处理或者声明抛弃(throws)该异常,捕获异常可以使用try{}catch(){}语句,而抛弃异常在方法声明是声明,在方法的声明后面加上throws XxxxException,抛弃多个异常时在各异常间使用逗号(,)分隔,题目中的程序在运行时抛出的不是一个RuntimeException,所有必须捕获或者抛弃,而程序又没有捕获,所有应该在方法声明中声明抛弃。由于Exception是所有异常的父类,所有当然也可以代表RuntimeException了。
54、Which classes can be used as the argument of the constructor of the class FilterInputStream?
  A. FilterOutputStream
  B. File
  C. InputStream
  D. RandomAccessFile
  题目:哪些类可以作为FilterInputStream类的构造方法的参数。
  答案:(C)
FilterInputStream的构造方法只有一个,其参数是一个InputStream对象。
53、Which classes can be used as the argument of the constructor of the class FileInputStream?
  A. InputStream
  B. File
  C. FileOutputStream
  D. String
  题目:哪些类可以作为FileInputStream类的构造方法的参数。
  答案:(bd)
解析:此题同样是要求熟悉基础API,FileInputStream类的构造方法有三个,可接受的参数分别是:File、FileDescriptor、String类的一个对象。
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

54、Which is not a method of the class InputStream?
  A. int read(byte[])
  B. void flush()
  C. void close()
  D. int available()
  题目:下面哪个不是InputStream类中的方法
答案: (b)
  解析:这个题目没有什么好说的,要求熟悉java API中的一些基本类,题目中的InputStream是所有输入流的父类,所有要很熟悉,参看JDK的API文档。方法void flush()是缓冲输出流的基本方法,作用是强制将流缓冲区中的当前内容强制输出。
50、Given the following code:
  class Person {
  String name,department;
  public void printValue(){
  System.out.println("name is "+name);
  System.out.println("department is "+department);
  }
  }
  public class Teacher extends Person {
  int salary;
  public void printValue(){
  // doing the same as in the parent method printValue()
  // including print the value of name and department.
  System.out.println("salary is "+salary);
  }
  }
  Which expression can be added at the "doing the same as..." part of the method printValue()?
  A. printValue();
    B. this.printValue();
  C. person.printValue();
  D. super.printValue().
  题目:给出下面的代码:…下面的哪些表达式可以加入printValue()方法的"doing the same as..."部分。
   答案: (D)
  解析:子类可以重写父类的方法,在子类的对应方法或其它方法中要调用被重写的方法需要在该方法前面加上”super.”进行调用,如果调用的是没有被重写的方法,则不需要加上super.进行调用,而直接写方法就可以。这里要指出的是java支持方法的递归调用,因此答案a和b在语法上是没有错误的,但是不符合题目代码中说明处的要求:即做和父类的方法中相同的事情??打印名字和部门,严格来说也可以选a和b。
Which of the following assignment is not correct?
  A. float f = 11.1;
  B. double d = 5.3E12;
  C. double d = 3.14159;
  D. double d = 3.14D.
  题目:下面的哪些赋值语句是错的。
  答案:(A)
  解析:浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者F则是float,后面加d或者D则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。

22、Given the uncompleted code of a class:
  class Person {
  String name, department;
  int age;
  public Person(String n){ name = n; }
  public Person(String n, int a){ name = n; age = a; }
  public Person(String n, String d, int a) {
  // doing the same as two arguments version of constructor
  // including assignment name=n,age=a
  department = d;
  }
  }
  Which expression can be added at the "doing the same as..." part of the constructor?

  A. Person(n,a);
  B. this(Person(n,a));
  C. this(n,a);
  D. this(name,age).
  题目:给出下面的不完整的类代码:…
  下面的哪些表达式可以加到构造方法中的"doing the same as..."处?
    答案: (c)
  解析:在同一个类的不同构造方法中调用该类的其它构造方法需要使用this(…)的形式,而且必须是在构造方法的第一行调用,这个和普通的方法重载调用的方式不同,普通的方法可以直接使用方法名加参数来调用,而且调用位置没有限制,因此答案A是不行的,B的语法就是错误的,D的错误在于在父类型的构造函数被调用前不能引用类的成员。构造方法是一个类对象实例化的起点(虽然严格来说首先执行的并不是构造方法的第一个语句,而是内存的分配),因此在构造方法中不能将成员作为参数引用。
23、Which of the following statements about variables and their scopes are true?
  A. Instance variables are member variables of a class.
  B. Instance variables are declared with the static keyword.
  C. Local variables defined inside a method are created when the method is executed.
  D. Local variables must be initialized before they are used.
  题目:下面关于变量及其范围的陈述哪些是对的。
  A. 实例变量是类的成员变量。
  B. 实例变量用关键字static声明。
  C. 在方法中定义的局部变量在该方法被执行时创建
  D. 局部变量在使用前必须被初始化。
答案: (ACD)
  解析:类中有几种变量,分别是:局部变量(英文可以为:local\automatic\temporary\stack variable)是定义在方法里的变量;实例变量(英文为:instance variable)是在方法外而在类声明内定义的变量,有时也叫成员变量;类变量(英文为:class variable)是用关键字static声明的实例变量,他们的生存期分别是:局部变量在定义该变量的方法被调用时被创建,而在该方法退出后被撤销;实例变量在使用new Xxxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同;类变量在该类被加载时被创建,不一定要用new Xxxx()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期。任何变量在使用前都必须初始化,但是需要指出的是局部变量必须显式初始化,而实例变量不必,原始类型的实例变量在该类的构造方法被调用时为它分配的缺省的值,整型是0,布尔型是false,而浮点型是0.0f,引用类型(类类型)的实例变量的缺省值是null(没有进行实际的初始化,对它的使用将引起NullPointException),类变量的规则和实例变量一样,不同的是类变量的初始化是在类被加载时。


24、public void test() {
  try { oneMethod();
  System.out.println("condition 1");
  } catch (ArrayIndexOutOfBoundsException e) {
  System.out.println("condition 2");
  } catch(Exception e) {
  System.out.println("condition 3");
  } finally {
  System.out.println("finally");
  }

}
  Which will display if oneMethod run normally?
  A. condition 1
  B. condition 2
  C. condition 3
  D. finally

  题目:在oneMethod()方法运行正常的情况下将显示什么?
  答案:(AD)
  解析:如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,最前面的优先进行匹配比较,只要该异常是catch中指定的异常的子类就匹配成功进而执行相应的catch中的内容,而finally块中的内容无论是否发生异常都将被执行。
25、Given the following code:
  public class Test {
  void printValue(int m){
  do { System.out.println("The value is"+m);
  }
  while( --m > 10 )
  }
  public static void main(String arg[]) {
  int i=10;
  Test t = new Test();
  t.printValue(i);
  }
  }
  Which will be output?
  A. The value is 8
    B. The value is 9
  C. The value is 10
  D. The value is 11
  题目:给出下面的代码:…输出将是什么?
    答案: (c)
  解析:此题考察的是do… while循环和 -- 操作符的知识,do…while最少被执行一次,在执行完do中的内容后判断while中的条件是否为true,如果为true的话就再执行do中的内容,然后再进行判断,以此类推直到while的判断为false时退出循环执行循环后面的内容,而—操作符的规则是在变量右边的-- 将先进行运算,然后才是使变量的值减一,而在变量左边的是先将变量的值减一再运算
???26、Which of the following statements about declaration are true?
  A. Declaration of primitive types such as boolean, byte and so on does not allocate memory space for the variable.

  B. Declaration of primitive types such as boolean, byte and so on allocates memory space for the variable.

  C. Declaration of nonprimitive types such as String, Vector and so on does not allocate memory space for the object.

  D. Declaration of nonprimitive types such as String, Vector ans so on allocates memory space for the object.
  题目:下面的有关声明的哪些叙述是对的。
  A. 对原始数据类型例如boolean,byte的变量的声明不会为该变量分配内存空间。
  B. 对原始数据类型例如boolean,byte的变量的声明将为之分配内存空间。
  C. 非原始数据类型例如String,Vector的变量的声明不会为该对象分配内存。
  D. 非原始数据类型例如String,Vector的变量的声明会为该对象分配内存。
答案: (ad)
  对原始数据类型的变量的声明将为之分配内存并赋予一个缺省值,参见23题的叙述,而非原始数据类型的变量必须用new Xxxx()分配内存及初始化。但是严格来讲此题的答案有待确定,因为只有原始类型的实例变量和类变量的声明在类对象被创建/类被加载时完成内存的自动分配,而原始类型的局部变量必须显式初始化,从这点来看原始类型的局部变量没有被自动分配内存,SL275中只提出了非原始数据类型的变量必须使用new Xxxx()完成内存的分配而没有指出原始数据类型的变量是否在声明时即自动进行内存分配,而从局部变量不能在显式初始化前使用这点来看在声明时没有进行内存分配。因此答案a的正确性还有待官方的确定。
27、In the Java API documentation which sections are included in a class document?

    A. The description of the class and its purpose
  B. A list of methods in its super class
  C. A list of member variable
  D. The class hierarchy
  题目:在Java API文档中下面的哪些部分被包括在内
  A. 类及用途的描述
  B. 父类的方法的列表
  C. 成员变量的列表
  D. 类层次
答案:ACD
  类文档的内容主要是:类层次、类及用途描述、成员变量列表、构造方法列表、成员方法列表、从类层次上继承的方法列表、成员变量的详细说明、构造方法详细说明、成员方法详细说明。
28、Given the following code:
  1) public void modify() {
  2) int i, j, k;
  3) i = 100;
  4) while ( i > 0 ) {
  5) j = i * 2;
    6) System.out.println (" The value of j is " + j );
  7) k = k + 1;
  8) i--;
  9) }
  10} }
Which line might cause an error during compilation?
  A. line 4
  B. line 6
  C. line 7
  D. line 8

  题目:给出下面的代码:… 哪些行在编译时可能产生错误。
  答案:(c)
  这个问题在前面有关变量的类型及其作用域的问题中讨论过,局部变量在使用前必须显式初始化,而代码中的变量k在使用前没有。
29、Which of the following statements about variables and scope are true?
  A. Local variables defined inside a method are destroyed when the method is exited.
  B. Local variables are also called automatic variables.
    C. Variables defined outside a method are created when the object is constructed.
  D. A method parameter variable continues to exist for as long as the object is needed in which the method is defined.

  题目:下面有关变量及其作用域的陈述哪些是对的。
答案: (abc)
  A. 在方法里面定义的局部变量在方法退出的时候被撤销。
  B. 局部变量也叫自动变量。
  C. 在方法外面定义的变量(译注:即实例变量)在对象被构造时创建。
  D. 在方法中定义的方法的参变量只要该对象被需要就一直存在。
  本题还是讨论变量的类型及作用域,参看前面的叙述。
30、A class design requires that a member variable cannot be accessible directly outside the class. Which modifier should be used to obtain the access control?
  A. public
  B. no modifier
  C. protected
  D. private

  题目:类的设计要求它的某个成员变量不能被外部类直接访问。应该使用下面的哪些修饰符获得需要的访问控制。
    答案:(d)
  这个在前面也有叙述,java有四种访问类型,分别为:public,protected,default,private,其中public变量可以被所有的外部类访问,而pretected的可以被同一个包及该类的子类访问,default即没有任何修饰符的变量可以被同一个包中的类访问,而private变量只能在被该类内部被访问。题目中的外部类应该理解为除该类自身的所有其它类,因此只有使用private可以达到要求。

                                
31、Given the following code fragment:
  1) String str = null;
  2) if ((str != null) && (str.length() > 10)) {
  3} System.out.println("more than 10");
  4} }
  5) else if ((str != null) & (str.length() < 5)) {
  6} System.out.println("less than 5");
  7} }
  8) else { System.out.println("end"); }
  Which line will cause error?
  A. line 1
  B. line 2
  C. line 5
  D. line 8
  题目:给出下面的代码片断:…哪些行将导致错误。
  答案:C
  解析:此题需要将代码仔细看清楚,查询没有逻辑错误,if …else的使用没有问题,也没有拼写错误,错误在于第5行的“与”操作符的使用,逻辑操作符(logical operator)的“与”应该是&&,而&是位逻辑操作符(bitwise logical operator)的“与”,使用的对象不一样,逻辑操作符的“与”的左右操作数都应该是布尔型(logical boolan)的值,而位逻辑操作符的左右操作数都是整型(integral)值。
32、Which statements about Java code security are true?
  A. The bytecode verifier loads all classes needed for the execution of a program.
  B. Executing code is performed by the runtime interpreter.
  C. At runtime the bytecodes are loaded, checked and run in an interpreter.
  D. The class loader adds security by separating the namespaces for the classes of the local file system from those imported from network sources.
  题目:下面有关java代码安全性的叙述哪些是对的。
  A. 字节码校验器加载查询执行需要的所有类。
  B. 运行时解释器执行代码。
  C. 在运行时,字节码被加载,验证然后在解释器里面运行。
  D. 类加载器通过分离本机文件系统的类和从网络导入的类增加安全性。
    答案: (bcd)
  SL275中描述的Java程序运行的过程是这样的:类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。后三个答案是SL275中的原话。
Which statement is correct?
  A. When compilation some error will occur.
  B. It is correct when compilation but will cause error when running.
  C. The output is zero.
  D. The output is null.
  题目:给出下面的代码:…那个叙述是对的。
  A. 编译时将发生错误。
  B. 编译时正确但是运行时出错。
  C. 输出为0。
  D. 输出为null
答案:C
  解析:int型数组是类对象,它在类被加载时完成初始化,在前面题目中已经有叙述,由于是原始数据类型int,其初始值为0。
Given the following code:
  public class Person{
  int arr[] = new int[10];
  public static void main(String a[]) {
  System.out.println(arr[1]);
  }
  }
  Which statement is correct?
  A. When compilation some error will occur.
  B. It is correct when compilation but will cause error when running.
  C. The output is zero.
  D. The output is null.

  给出下面的代码:… 哪些叙述是对的。
  A. 编译时出错。
  B. 编译时正确而运行时出错。
  C. 输出0。
  D. 输出null。
    答案: (a)
  实例变量在类的一个实例构造时完成初始化,而且在类的静态方法中不能直接访问类的非静态成员而只能访问类成员(像上题中一样),类的普通方法可以访问类的所有成员和方法,而静态方法只能访问类的静态成员和方法,因为静态方法属于类,而普通方法及成员变量属于类的实例,类方法(静态方法)不能使用属于某个不确定的类的实例的方法和变量,在静态方法里面没有隐含的this,而普通方法有。
public class Parent {
  public int addValue( int a, int b) {
  int s;
  s = a+b;
  return s;
  }
  }
  class Child extends Parent {
  }
  Which methods can be added into class Child?
  A. int addValue( int a, int b ){// do something...}
  B. public void addValue (){// do something...}
  C. public int addValue( int a ){// do something...}
  D. public int addValue( int a, int b )throws MyException {//do something...}
  题目:哪些方法可以加入类Child中。
    答案: (bc)
  此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:一、参数列表必须不同,个数的不同完全可以,如果个数相同则参数类型的不同不能引起歧意,例如int 和long,float和double就不能作为唯一的类型不同;二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回类型必须一致)。方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!重写的另一个规则是重写的方法不能比被重写的方法抛弃(throws)更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类。此题中答案a的错误就是重写的访问权限比被重写的方法的低,而b,c都属于重载,d的错误在于比被重写的方法抛弃了更多种类的异常。
【推荐】卖我网
http://www.maiwo.net  

各学校招聘信息一网打尽

TOP

 14 12
发新话题