java 6个机制

java 6个机制
java 6个机制

*克隆机制

克隆就是在内存中复制对象,Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见。但有时候用克隆会更方便更有效率。(缺点应该是多分配了一块空间,占内存吧,如果数据量大,内存占用的就大)

对于克隆(Clone),Java有一些限制:

1、被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。Cloneable 接口实际上是个标识接口,没有任何接口方法。

2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。

3、在https://www.360docs.net/doc/9d8951027.html,ng.Object类中克隆方法是这么定义的:

protected Object clone()throws CloneNotSupportedException{ }

创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。

按照惯例,返回的对象应该通过调用 super.clone 获得。

克隆分为深克隆和浅克隆

浅度克隆:浅度克隆对于要克隆的对象,对于其基本数据类型的属性,复制一份给新产生的对象,对于非基本数据类型的属性,仅仅复制一份引用给新产生的对象,即新产生的对象和原始对象中的非基本数据类型的属性都指向的是同一个对象;

深度克隆:在浅度克隆的基础上,对于要克隆的对象非基本数据类型的属性对应的类,也实现克隆,这样对于非基本数据类型的属性,复制的不是同一份引用,即新产生的对象和原始对象中的非基本数据类型的属性指向的不是同一个对象。

*序列化机制

序列化也叫串行化,试讲对象转换成紧凑的二进制域的形式,使该对象具备可以被持久化即永久保存的特性。

序列化的必要性

Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。

这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。

如何序列化一个对象

一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。

有了这个标记的Class就能被序列化机制处理。

import java.io.Serializable;

class TestSerial implements Serializable {

public byte version = 100;

public byte count = 0;

}

然后我们写个程序将对象序列化并输出。ObjectOutputStream能把Object输出成Byte流。

我们将Byte流暂时存储到temp.out文件里。

public static void main(String args[]) throws IOException {

FileOutputStream fos = new FileOutputStream("temp.out");

ObjectOutputStream oos = new ObjectOutputStream(fos);

TestSerial ts = new TestSerial();

oos.writeObject(ts);

oos.flush();

oos.close();

}

如果要从持久的文件中读取Bytes重建对象,我们可以使用ObjectInputStream。

public static void main(String args[]) throws IOException {

FileInputStream fis = new FileInputStream("temp.out");

ObjectInputStream oin = new ObjectInputStream(fis);

TestSerial ts = (TestSerial) oin.readObject();

System.out.println("version="+ts.version);

}

多线程机制

*反射机制

反射是Class类具备了解析其他类的对象的内部结构的功能或者说是本领。

Java中至简的说只有两个类Object和Class类。

有了Class类,就可以由Class类解析生成了你想要的实体类。

Class以类的形式存在,Object以对象的形式存在。所以说Class类是描述Object的。

反射机制也叫做自省机制,自己了解自己。Class类中有一系列的属性及方法,这些东西就可以实现反射。

应用反射,就可以知道这个类中哪些方法和属性可以调用和使用。

CLass类中的方法有很多,知晓类的内部结构,就可以调用相应的方法来获取类中相应的属性或方法数组并生成方法或者属性类的集合,这些可以自行学习API来理解。

由Class类获取到了一个类中的属性和方法等结构内容,就可以知晓一个类的内部结构是什么样的。

Class类不仅可以描述对象,还可以生成对象,生成的对象经过下塑造性就可以得到我们想要的类。

对反射进行封装的类为https://www.360docs.net/doc/9d8951027.html,ng.Class类。

多线程机制

简介:

多线程的目的是为了最大限度的利用CPU资源。

Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。

实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。

内容复习:

程序运行的本身是以进程为单位的,程序中的细小的分支即线程,线程离开进程遍无意义。

进程:是程序的一次动态执行过程(运行在操作系统平台),它对应了从代码加载,执行至执行完毕的一个完整过程(main方法中执行)。

main方法本身就是一个进程

线程:是比进程更小的执行单位,一个进程在其执行的过程中,可以产生多个线程,他们分别可以执行不同的任务。

进程与进程来讲,是彼此独立的,不共享空间,而线程之间需要互相联系,所以空间是可以相互共享的。

进程和线程的关系和区别:

进程需要操作系统为其分配独立的内存地址空间。而同一个进程中的线程在同一块地址空间中工作这些线程可以共享一块内存和系统资源,比如共享一个对象或者打开的一个文件。

操作系统是以进程为单位的,程序是以线程为单位的。

多线程程序的用途:

1 充分利用CPU资源,避免资源的浪费。提高处理数据的效率。

2 与用户的更往交互(如复制 ofice)

简化开发模型,每个线程就是指一个单独的任务,这样有助于开发人员对程序的理解和维护。

3 模拟同步动作(动画的效果,交替的执行,几个线程同步执行)

将任务分化成更细粒度的线程,交替执行,模拟同步操作每个线程都会得到一小段程序执行的时间片。

4 节约成本

提高速率的3中方法:

a 增加处理器个数

b 启动多个进程(相互独立,影响通信)

c 多线程

多线程的声明周期阶段

1 创建阶段:实例化线程

https://www.360docs.net/doc/9d8951027.html,ng.Thread https://www.360docs.net/doc/9d8951027.html,ng.Runnable接口

线程的封装类 Thread

1 设计线程类:

class A extends Thread

{

public void run()

{

被重构的Run方法:写要执行的业务逻辑代码;

代码为:当前线程抢占到资源之后所做的事情,}

}

2 设计Runnable接口类,实现该接口,创建线程

class A implements Runnable

{

public void run()

{

被重构的Run方法:写要执行的业务逻辑代码;

代码为:当前线程抢占到资源之后所做的事情,}

}

两种方法的区别,单继承就是用thread即可,实现多个父类时,用Runnable接口。

线程对象实例化方法:

实现Runnable接口时的线程对象实例化方法

Thread t=new Thread(new A());

继承Thread类时的线程对象实例化方法:

A a1=new A();

2 可运行状态

1 就绪状态:当前创建的线程对象一定要放在队列当中,这个队列叫CPU线程队列,只有放在该对列里,才有去抢占CPU资源的权利。放在该队列里了,就表明该队列处于就绪状态。

CPU看见谁,就会给谁分配时间片,让其运行,然后在交替的去分配给别的线程时间片。就绪状态调用的方法为 start()方法。

2 运行:运行状态回调的方法为run()方法,

3 阻塞状态:主动让其休眠,被动的让其休眠

调用的方法1 为sleep(int 时间ms)休眠期,哪个线程调用该方法,哪个线程休息,休息时间有参数决定。休眠时并没有退出队列,休息之后,不需要要通知CPU,可直接调用。

调用的方法2 wait(); 等待:在线程队列之外进行等待,来解决阻塞的问题。

详解为:在阻塞时,会主动退出队列,而再次需要他时,程序要主动召唤它才能再次使用,而唤醒处于等待的对象调用的方法有两种:

1void notify();如果当前的程序可以解决阻塞状态,则需要主动的去唤醒处于队列之外的其他线程对象,唤醒一个线程的方法为notify();

2唤醒所有线程的方法为notifyAll();

封装这三种方法的类为Object类:wait(),notify(),notifyAll();

系统直接支持线程阻塞机制,多线程同步机制。

多线程带来的问题:处理数据的方法有可能存在数据处理不安全,数据处理不同步的安全隐患。

那么处理该问题的方法为线程同步的处理方法(阻塞的第三种方法):在线程要处理的方法前面加上修饰词:synchronized,降低了执行速率,同步之后是排队进行处理的,但是是随机的排队。一个一个的处理,避免了其他的线程抢占资源后出现错误安全隐患。

线程同步的优缺点:

线程同步(即在线程要处理的方法前面加上修饰词:synchronized)可以确保数据在多线程的环境下时,处理是准确和安全的。

线程同步的方法处理数据的速度慢。

!!!线程同步总结:

程序处理数据时尤其是写数据,我们首先应该注意的是,数据处理的准确性,一致性和安全性。所以,为了确保以上三点,java当中是通过同步来解决上述问题的,而同步的方法,就意味着当前线程在处理数据时,其他的线程对象要处于阻塞状态,所以线程同步会导致数据的处理速度慢,可是线程同步却能保证数据处理的安全性。

使用同步的情况:

多线程程序同时访问一个方法时,该方法如果是更新(增删改)数据的方法,就一定要加上同步的修饰词synchronized,

查询数据的时候要考虑数据的速度,不需要考虑安全性。

所以不需要同步。

4 销毁状态

Yeild(); //官方解释终止线程,但实际应用时不是。

Alived(); //企鹅U定线程是否被销毁,不能使线程终止。

是线程死亡的方法是:

在run()方法中加条件,要销毁的时候return;来结束run()方法。

线程是分级别的,0,1,2:高中低

高级别的线程,CPU看到他的几率越高。

线程习题:

进程与线程的定义与区别?

进程:是程序的一次动态执行过程,他对应了从代码加载、执行至执行完毕的一个整个过程。

(一般在控制类中住方法里执行的main()本身就是一个进程)

线程:是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,他们分别可以执行不同的任务。

区别:

进程需要操作为其分配独立的内存地址空间,而同一个进程中的线程在同一块地址空间中工作,

这些线程可共享同一块内存和系统资源,比如共享一个对象或者共享打开的一个文件.

6、多线程的用途?

a、充分利用CPU的资源避免资源浪费

什么时候使用多线程:即提高系统效率时使用。

b、与用户的更加交互(复制Office)

简化开发模型,每一个线程就是指一个单独的任务,这样有助于开发人员对程序的理解和维护。

c、模拟同步动作(模拟同步动作)

d、节约成本

提高效率的三种办法:1、增加处理器的个数(多核)//成本高2、启动多个进程3、多线程//提高处理速度,没有在硬件上增加成本

7、线程的生命周期?分别由程序实现?例如

(1)创建状态:实例化线程对象(https://www.360docs.net/doc/9d8951027.html,ng.Thread java.long.Runnable接口)

如何设计线程类

方法一:先继承Thread 之后重构run()

例:

class A extends Thread//Thread中有一个无返回值的run()

{

public void run()//重构run()

{

}

}

方法二:

实现Runnable() 之后重构run()

例:

class A implements Runnable//Runnable中有一个无返回值的run()

{

public void run()//重构run()

{

}

}

如何创建线程:

方法一:Thread

Thread t=new Thread(new A);

方法二:Runnable

A a1=new A();

(2)可运行状态:(包括两种状态:即就绪状态和运行状态)

就绪状态调用的方法是:线程对象.start();

运行状态执行的是重构run();

(3)阻塞状态:调用方法sleep(int a)//休眠休眠时CPU将不会处理参数为整数,单位是毫秒

(4)销毁状态:

8、sleep()、wait()方法之间的区别?

sleep(Long l);//主动休眠休息一段时间会自动醒来并没有推出CPU队列。休眠期过之后会激活程序

wait();//被动等待在线程队列之外进行等待,来解决阻塞问题

9、notify()、notifyAll()方法之间的区别是什么?

notify()//唤醒一个

nottifyAll()//唤醒多个

10、线程的阻塞状态有几种?分别是哪几种,区别是什么?(答案不确定)

三种主动休眠、被动等待、同步

sleep(Long l);//主动休眠:休息一段时间会自动醒来并没有推出CPU队列。休眠期过之后会激活程序

wait();//被动等待:在线程队列之外进行等待,来解决阻塞问题

同步:同步的方法就意味着当前线程在处理数据时,其他的线程对象要处于阻塞状态,程同步会导致数据的吹速度慢,可是却能保证数据的安全性

11、为什么要进行线程同步?怎么同步?

程序处理数据时,尤其是写数据,我们首先应该注意的是数据处理的准确性、一致性、安全性,

所以为了确保以上三点,java当中是通过同步来解决问题,而同步的方法就意味着当前线程在处理数据时,

其他的线程对象要处于阻塞状态,程同步会导致数据的速度慢,可是却能保证数据的安全性线程同步:多个线程操作同一个程序

12、线程同步有什么优点?有什么缺点?

好处:线程同步可以确保数据在多线程的环境下处理是准确、安全和一致性的。

缺点:线程同步的方法处理数据的速度慢

13、在系统中加入线程的优势有哪些?

确保数据在多线程的环境下处理是准确性、安全性和一致性的。

北大青鸟推荐:Java精选笔试题(含答案解析)

北大青鸟推荐:Java精选笔试题(含答案解析)如果你是计算机专业出生,但是还没有找到工作的话,你就得补补技术了,一些关于面试、笔试的题要多刷一刷。有可能你知道答案,但是由于语言组织能力有所欠缺,所以面试官的印象不是很好,下面分享一些Java精选的鄙视题,希望对面试这者有帮助。 1,volatile关键字是否能保证线程安全?() 答案:否 volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对volatile的写操作,无法保证线程安全。 假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时volatile关键字修改之后,还是会存在并发的情况。 2,下面哪个流类属于面向字符的输入流( ) A、BufferedWriter B、FileInputStream C、ObjectInputStream D、InputStreamReader 答案:D Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。

面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。 面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。 3,Java能不能不通过构造函数创建对象() A、能 B、不能 答案:A Java创建对象的几种方式: (1) 用new语句创建对象,这是最常见的创建对象的方法。 (2) 运用反射手段,调用https://www.360docs.net/doc/9d8951027.html,ng.Class或者https://www.360docs.net/doc/9d8951027.html,ng.reflect.Constructor类的newInstance()实例方法。 (3) 调用对象的clone()方法。 (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。 (1)和(2)都会明确的显式的调用构造函数;(3)是在内存上对已有对象的影印,所以不会调用构造函数;(4)是从文件中还原类的对象,也不会调用构造函数。 4,下列哪个叙述是正确的() A.子类继承父类的构造方法。 B.abstract类的子类必须是非abstract类。 C.子类继承的方法只能操作子类继承和隐藏的成员变量。 D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。 答案:C 子类是不继承父类的构造方法的,而是必须调用其父类的构造方法。

Java API 试题

永隆 JAVA笔试题 一、选择题 1、关于Java 类的加载过程,下面哪些描述是正确的() A、在 Java 中,有四种类型的类加载器:BootStrapClassLoader、ExtClassLoader、AppClassLoader 以及用户自定义的ClassLoader。//Extension ClassLoader, System ClassLoader+用户自定义的classloader B、使用 new 关键字创建类实例时,其实就显示地包含了类的加载过程 C、在 Java 中,类的实例化流程分为两个部分:类的加载和类的实例化。类的加载又分为显式加载和隐式加载。 D、Class.forName 来加载类时,是通过 ExtClassLoader进行加载的。 //system classLoader 加载 2、关于HashMap的实现机制,下面哪些描述是正确的() A、HashMap中key-value 当成一个整体进行处理,系统总是根据数组的坐标来获得key-value 的存储位置。//没有存储顺序,无下标之说! B、HashMap基于哈希表的 Map 接口的实现,允许使用 null 值和 null 键。 C、如果HashMap中,如果Key的hash相同的话,HashMap将会出错。//会替换相应的value D、HashMap每次容量的扩增都是以2的倍数来增加。//大约获得2倍的桶数! 3、下面的代码执行输出正确的是() 1. public class test( 2. public int aMethod()[ 3. static int i=0; 4. i++; 5. return I; 6. ) 7. public static void main (String args[]){ 8. test test = new test(); 9. test.aMethod(); 10.int j = test.aMethod(); 11.System.out.printIn(j); 12.] 13.} A. 编译错误 B. 编译成功,打印出是“0” C. 编译成功,打印出是“1” D. 编译成功,打印出是“2” A 4、如何获取下面表单 select

类的加载

类从加载到虚拟机到卸载,它的整个生命周期包括:加载(Loading),验证(Validation),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)。其中,验证、准备和解析部分被称为连接(Linking)。 加载: 在加载阶段,虚拟机主要完成三件事: 1.通过一个类的全限定名来获取定义此类的二进制字节流。 2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。 3.在Java堆中生成一个代表这个类的https://www.360docs.net/doc/9d8951027.html,ng.Class对象,作为方法区域数据的访问入口。 验证: 验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个https://www.360docs.net/doc/9d8951027.html,ng.VerifyError异常或其子类异常。验证过程分为四个阶段: 1.文件格式验证:验证字节流文件是否符合Class文件格式的规范,并且能被当前虚拟机正确的处理。 2.元数据验证:是对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言的规范。 3.字节码验证:主要是进行数据流和控制流的分析,保证被校验类的方法在运行时不会危害虚拟机。

4.符号引用验证:符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在解析阶段中发生。 准备: 准备阶段为变量分配内存并设置类变量的初始化。在这个阶段分配的仅为类的变量(static修饰的变量),而不包括类的实例变量。对已非final的变量,JVM会将其设置成“零值”,而不是其赋值语句的值: pirvate static int size = 12; 那么在这个阶段,size的值为0,而不是12。final修饰的类变量将会赋值成真实的值。 解析: 解析过程是将常量池内的符号引用替换成直接引用。主要包括四种类型引用的解析。类或接口的解析、字段解析、方法解析、接口方法解析。 初始化: 在准备阶段,类变量已经经过一次初始化了,在这个阶段,则是根据程序员通过程序制定的计划去初始化类的变量和其他资源。这些资源有static{}块,构造函数,父类的初始化等。 至于使用和卸载阶段阶段,这里不再过多说明,使用过程就是根据程序定义的行为执行,卸载由GC完成。

【IT专家】来自加载类的Java Call类函数

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 来自加载类的Java Call类函数 2011/02/25 1277 How would I, if possible, call a function in my Main class in the class that I load? (I know that is impossible to understand, so I’ll explain) ?如果可能的话,我如何在我加载的类中调用Main类中的函数? (我知道这是不可能理解的,因此我会解释) I.E: public class SomeClass public SomeClass //load a class here public void FuncToCall() {}//In a separate file, dynamically loaded.public class LoadedClass public LoadedClass //Call a function in the class that loads this SomeClass.FuncToCall(); So I would end up having 2 files: SomeClass.class and LoadedClass.class. I guess my main question is, how do I reference SomeClass in LoadedClass? ?因此我最终会得到2个文件:SomeClass.class和LoadedClass.class。我想我的主要问题是,如何在LoadedClass中引用SomeClass? **EDIT: So maybe I should better explain the use case. A java program dynamically loads the “SomeClass” script from a folder. The script then downloads a .jar file from the internet and opens and runs the “LoadedClass” script within that. How do I use functions in SomeClass in LoadedClass if SomeClass isn’t in the same .jar or in a .jar at all? ?因此也许我应该更好地解释用例。java程序从文件夹动态加载“SomeClass”脚本。然后,该脚本从Internet下载.jar文件,并在其中打开并运行“LoadedClass”脚本。如果SomeClass不在同一个.jar或.jar中,我如何在LoadedClass中的SomeClass中使用函数? ?你这样做.. ?If they are in different packages you have to either import the class or use the fully qualified name. ?如果它们位于不同的包中,则必须导入该类或使用完全限定的名称。

实验五Java事件处理

实验五Java事件处理 实验目的 1.掌握Java语言中的事件处理方法 2.掌握Java语言中事件源、监视器和处理事件的接口的概念 实验内容 1.图形用户界面设计程序(ArtFo nt.java) 在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont 类的对象做监视器和匿名内部类的对象做监视器实现。 要求实现如下功能: 当在文本框中输入文字后回车,在文本域中显示输入的文字。当分别选择粗体和斜体 复选框时,文本域中的文字分别显示粗体和斜体样式。 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的 前景色和文本域的前景色设置为选定的颜色。 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字 体样式。 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字 体大小。 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。 图1程序界面运行效果 package Sy; import java.awt.*; import java.awt.event.*;

import javax.swing.*; public class ArtFont extends JFrame { static ArtFont artFont; JComboBox fontType;// 字体样式下拉框 JComboBox fontSize;// 字体大小下拉框 JComboBox windowStyle;// 窗体样式下拉框 JCheckBox boldBx;// 粗体按钮 JCheckBox italicBx;// 斜体按钮 JButton colorBtn;// 颜色按钮 String[] fontNames;// 字体名称 String[] fontSizes;// 字体大小 JLabel label;// 输入提示标签 JTextField inputText;// 文字输入框 JTextArea txtArea;// 文字显示区 JPanel northPanel;// 字体设置 JPanel centerPanel;// 显示效果区 JPanel southPanel;/样式设置 Font font; int boldStyle, italicStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle = Color.black;// 设置字体的默认颜色为黑色 String[] style = { "默认显示效果 ", "Windows 显示效果 ", "Unix 显示效果 " }; public ArtFont() { super(”字体设置"); // 设置默认字体 boldStyle = 0; italicStyle = 0; fontSizeStyle = 10; fontNameStyle = "宋体 ";

java如何写存储过程

Java中对存储过程的调用 一:Java如何实现对存储过程的调用: A:不带输出参数的 ---------------不带输出参数的---------------------------------- create procedure getsum @n int =0<--此处为参数--> as declare @sum int<--定义变量--> declare @i int set @sum=0 set @i=0 while @i<=@n begin set @sum=@sum+@i set @i=@i+1 end print 'the sum is '+ltrim(rtrim(str(@sum))) --------------在SQL中执行:-------------------- exec getsum 100 ------------在JAVA中调用:--------------------- JAVA可以调用但是在JAVA程序却不能去显示该存储过程的结果因为上面的存储 过程的参数类型int 传递方式是in(按值)方式 import java.sql.*; public class ProcedureTest { public static void main(String args[]) throws Exception { //加载驱动 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); //获得连接 Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa",""); //创建存储过程的对象 CallableStatement c=conn.prepareCall("{call getsum(?)}"); //给存储过程的参数设置值 c.setInt(1,100); //将第一个参数的值设置成100 //执行存储过程 c.execute(); conn.close();

Java程序是如何运行的

Java程序是如何运行的 JVM是Java的运行时虚拟机,所有的Java程序都是在JVM沙箱中运行,每个Java程序就是一个独立的JVM进程。 谈到Java程序是如何运行的,首先需要理解的肯定是JVM是如何运行的,什么是JVM;要理解我们编写的Java程序,运行起来以后到底是什么样子,本质上就是弄清楚JVM是什么样子。 Java程序的代码是什么样的 Java诞生之初最大的卖点就是编写的代码跨平台可移植性,实现这种可移植性,是因为Java通过平台特定的虚拟机,运行中间的字节码,而不是直接编译成本地二进制代码实现,中间字节码也就是java文件编译后生成的.class文件,Jar包的话,实际上只是一系列.class文件的集合。 编写Java程序,首先需要一个入口点,在运行的时候通过指定MainClass来指定入口点,代码层面主类必须实现一个静态的main函数,运行时虚拟机会从MainClass.main开始执行指令,其他的逻辑只是import和函数调用了。 SDK自带的javac命令,负责将我们编程的Java代码,也就是.java文件,编译成平台无关的字节码;字节码可以在任何操作系统平台上,通过平台对应的JVM执行;JVM执行的时候,运行字节码,根据自己的平台特性,将字节码转换成平台相关的二进制码运行。 javac编译器运行的过程大致分为:词法分析(Token流)、语法分析(语法树)、语义分析(注解语法树),还有代码生成器,根据注解语法树,生成字节码, 语义分析阶段,编译器会做一些操作,将人类友好的代码,做一些处理,转换成更符合机器执行机制的代码,例如全局变量,魔法变量,依赖注入,注解这些魔法机制。大致分为以下步骤: 1. 给类添加默认构造函数 2. 处理注解 3. 检查语义的合法性并进行逻辑判断 4. 数据流分析 5. 对语法树进行语义分析(变量自动转换并去掉语法糖) JVM是什么 JVM = 类加载器 classloader + 执行引擎 execution engine + 运行时数据区域 runtime data area JVM就是运行编译好字节码的虚拟机,不同的操作系统和平台上,虚拟机将平台无关的字节码,编译成特定平台的指令去执行。我觉得,JVM首先是一个独立运行在操作系统上的进程。执行java命

Java的数据结构相关的类实现原理

Java的数据结构相关的类实现原理 List接口 List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。 实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。 LinkedList List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。 此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。 所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。 注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使 用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示: List list = Collections.synchronizedList(new LinkedList(...)); 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛 出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。 注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。 ArrayList

java实验指导书

实验一java开发环境及语言基础 实验目的 (1)确保正确配置java开发环境。 (2)了解javac和java命令的使用。 (3)熟悉java中的运算符。 (4)掌握条件语句和循环语句的使用。 (5)掌握通过命令行参数接受数据。 (6)掌握用Scanner类接受数据。 实验内容 (1)在控制台中输入java命令,查看输入结果。 (2)编写一个java程序,计算半径为3.0的圆周长和面积并输出结果。 (3)求a+aa+aaa+...+a...a(n个)的和,其中a为1~9之间的整数。例如,当a=3、n=4时,求3+33+333+3333的和。 (4)给定一个正整数m,统计其位数,分别打印每一位数字,再按照逆序打印出各位数字。(5)用Scanner类方法输入三角形三边求三角形面积。 实验要求 (1)JDK的安装及配置。 (2)在DOS及eclipse下编辑、编译运行第一个java程序:hello world。 (3)求圆周长和面积用方法实现,主函数调用。 (4)从命令行输入1~9之间的整数a,当所求的和大与106时,输出相应的a值及所求的和值。 (5)用Scanner类的方法输入正整数m,m的值不应该超过99999,否则给出错误信息。应引入包:import java.util.Scanner,然后在需要的方法中实例化对象:Scanner sc = new Scanner(System.in),最后调用对象的next方法,如int n=nextInt(),接受整数。 实验二数组 实验目的 (1)掌握数组的定义和使用方法。 (2)熟悉数组的排序、查找的方法。 (3)巩固循环的使用。 实验内容 (1)使用for循环,将二维数组的行与列互换,即完成矩阵的转置。 (2)编写数组的排序程序。 (3)编写杨辉三角。 实验要求 (1)编写一个界面1 选择排序2 冒泡排序3插入排序4 快速排序5 退出 当选择1、2、3、4、5的时候完成相应的功能。 (2)杨辉三角形状为等腰三角形 实验三字符串 实验目的 (1)掌握正则表达式的使用。 (2)熟悉java的字符串。

Java开源架构技术学习重点(部分答案版)(1)

第一章 Strut2框架技术的入门 1、Struts2的是怎么产生的? Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并,全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因此Struts2和Struts 1有着太大的变化,但是相对于WebWork,Struts2只有很小的变化。 2、Struts2的设计模式是什么?采用这种设计模式有什么好处? MVC模式 MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论选择 哪种语言,无论应用多复杂,它都能为理解分析应用模型提供最基本的分析方法, 为构造产品提供清晰的设计框架,为软件工程提供规范的依据。 1. 模型(Model) Model 部分包括业务逻辑层和数据库访问层。在Java Web 应用程序中,业务逻辑层一般由JavaBean或EJB构建。Model 部分就是业务流程或状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的组件。MVC并没有提供模型的设计方法,而只提供给用户应该组织管理这些模型,以便于模型的重构和提高重用性。 2. 视图(View) 在Java Web 应用程序中,View 部分一般用JSP 和HTML 构建,也可以是XHTML、XML、Applet和JavaScript。客户在View 部分提交请求,在业务逻辑层处理后,

java 按钮事件

代码如下,注意注释: import java.awt.Container; import java.awt.event.*; import javax.swing.*; public class ShortTest2 extends JFrame implements ActionListener { JButton jb1; JPanel j1; public ShortTest2() { Container contentPane = this.getContentPane(); j1 = new JPanel(); jb1 = new JButton("Draw"); jb1.addActionListener(this); j1.add(jb1); contentPane.add(j1, "North"); } public static void main(String[] args) { ShortTest2 m = new ShortTest2(); m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); m.setSize(600, 370); m.setLocationRelativeTo(null); m.setVisible(true); } public void actionPerformed(ActionEvent ae) { //主要是这里,按钮一按就执行下面的代码 JOptionPane.showMessageDialog(null, "Hello World!"); } } java点击按钮,出现另一个窗口 第一个窗体LoginFrame.java:

java类加载机制

Java类加载机制(一) 译:ayi 第一次翻译,翻译得不是很好,请多多指点 我的邮箱:nonopo12345@https://www.360docs.net/doc/9d8951027.html, 原文:https://www.360docs.net/doc/9d8951027.html,/pub/a/onjava/2005/01/26/classloading.html 类加载是java特性的一个重量级的组成部分。尽管,java中“advanced topics”的发展,使java的类加载机制的地位有所下降。但每位编程着都应该知道这部分的工作机制,以及怎样去更好与其配合。这可以使我们节省很多时间,二不必要浪费在调试ClassNotFoundException, ClassCastException, 等。 这篇文章将从最基本的开始,比如代码和数据的关系和区别,以及他们怎么样关系起来形成一个实例或者对象。然后将会说到,java中怎样通过类加载器把代码加载到JVM中,以及java中实现的主要的几种类型的类加载器。然后在这篇文章中我们将会了解到java类加载机制的内幕,我们将使用最基本的代码来描述,这些代码执行与类加载器之后,但在加载一个类之前。在接下来的部分将使用一些例子来强调,对于开发者继承和开发自己的类加载器的必要性。接着将告诉你们怎样编写自己的类加载器,以及怎样使用它们去创建一个一般的能加载包括远程客户端辅助代码的类加载器引擎,以及怎样把它在JVM中定义,实例化,然后执行。习惯上,把J2EE-specific components 中说明的作为java类加载的规范,这篇文章正是从这本手册总结来的。 类和数据 一个类代表一段要执行的代码,然而数据则代表与这些代码相关联的某种状态。状态可以改变,代码不能改变。我们把一种特定状态与一个类关联起来时,就得到了这个类的一个实例。所以同一个类的不同实例有不同的状态,但都参照相同的代码。在java中,一个类通常它的代码就包含在一个 .class 文件中,虽然其中也包括异常。然而,在java运行时,每个类都会构造一个超类对象(first-class object),它们其实是https://www.360docs.net/doc/9d8951027.html,ng.Class的实例。不论何时编译一个java文件,编译器都会在编译后的字节码中嵌入一个public, static, final型的字段class,这个字段表示的就是一个https://www.360docs.net/doc/9d8951027.html,ng.Class型的实例。因为它是public类型的,我们可以通过标识符来访问它,像这样: https://www.360docs.net/doc/9d8951027.html,ng.Class klass = Myclass.class; 只要一个类被加载到JVM,相同的类(强调:相同的类)将不会被重复加载。这将产生一个问题,什么才是相同的类?一个对象有一种特定状态和标识,对象总是与它所属类联系在一起,与这种状况相似,一个被加载到JVM中类也有特定的标识,接下来我们就阐述: 在java中,一个类通过认证的类全名来唯一标识。认证的类全名是由包名和类名两部分组

JavaSwing中处理各组件事件的一般步骤完整版

J a v a S w i n g中处理各组件事件的一般步骤 集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

Java Swing中处理各组件事件的一般步骤是: 1.新建一个组件(如JButton)。 2.将该组件添加到相应的面板(如JPanel)。 3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。 4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。 以上步骤我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。 为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。 首先,我们利用单个监听器来实现该程序。我们定义一个名为Simple1的类来包括所有代码。所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。以下是代码: import .*; import .*; public class Simple1 {

private static JFrame frame;dd(myPanel); (); (true); } } 让我们来看看以上代码是如何工作的。在main方法中,我们定义了一个JFrame,然后将面板Jpanel添加到窗体中,该面板包括两个按钮。相应的变量Frame,button1,button2定义在程序的开头部分。 在程序入口main方法中,首先新建Simple1组件,通过构造器建立用户GUI,定义一个面板Jpanle,,增加两个按钮,然后利用将两个按钮加入到一个活动监听器SimpleLister中,最后,两个按钮添加到面板。当GUI 建立后,我们将面板添加到窗体并显示结果。当用户点击按钮时,程序调用actionPerformed方法,通过if语句来判断是哪一个按钮被点击,然后在对话框中显示相应的内容。 利用一个监听器来处理事件的缺点是,当程序比较复杂时,需要一大串的if 语句来实现,程序代码较难阅读与维护。当然,如果处理的事件较少,这种方式比较简单。 通过使用匿名内部类可以解决上述存在的问题。使用简单的匿名内部类作为addActionListener的变量即可。以下是实现代码:

JAVA笔试题1

知识点: (1) 1.面向对象的软件开发有哪些优点? (1) 2.什么叫对象?什么叫类?类和对象有什么关系。 (1) 3.什么是包?把一个类放在包里有什么作用? (2) 4.作用域public、private、protected以及不写时(default)有什么区别? (2) 5.什么是方法?方法的结构是怎样的?设计方法应考虑哪些因素? (2) 6.什么是方法的覆盖?与方法的重载有何不同?方法的覆盖与属性的隐藏有何不同? (3) 7.什么是成员变量、局部变量、类变量和实例变量? (3) 8.什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来什么好处? (3) 9.什么是多态?面向对象程序设计为什么要引入多态的特性? (4) 10.“子类的域和方法的数目一定大于等于父类的域和方法的数目”,这种说法是否正确?为什么? (4) 11.父类对象与子类对象相互转化的条件是什么?如何实现它们的相互转化? (4) 12.接口与抽象类有哪些异同点? (4) 13.区分接口与抽象类分别在什么场合使用? (5) 14.一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象方法? (5) 15.进程与线程的区别与联系? (5) 编程: (6) 1.统计一个字符串中出现某个字母的次数(注意区分大小写)。 (6) 2.编写一个程序,在主类中创建和调用方法sumf(),方法sumf()的功能是进行两个浮点数的加法运算。6知识点: 1.面向对象的软件开发有哪些优点? 面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 从面向过程到面向对象是程序设计技术的一个飞跃。人们之所以要采用面向对象的程序设计技术,其目的在于:按照与人类习惯思维方法一致的原则开发系统;提高代码的可重用性(或者称为复用性);提升程序的开发与运行效率;提高程序的可靠性与可维护性;提高程序的可扩展性;增强程序的可控制性。总之,面向对象的程序设计,能够有效分解、降低问题的难度与复杂性,提高整个求解过程的可控制性、可监视性和可维护性,从而获得较高的开发效率与可靠效果。 2.什么叫对象?什么叫类?类和对象有什么关系。 对象(Object)是一个应用系统中用来描述客观事物的实体,是具有特定属性(数据)和行为(方法)的基本运行单位,是类的一个特定状态下的实例。对象是一件事、一个实体、一个名词、一个可以想象为有自己的标识的任何东西。对象是类的实例化。概括来说:万物皆对象。对象具有状态,一个对象用数据值来描述它的状态。 类(Class)是Java代码的基本组织模块,是用以描述一组具有共同属性和行为的对象的基本原型,是对这组对象的概括、归纳与抽象表达。类是对象的模板,它定义了本类对象所应拥有的状态属性集及操作这组属性的行为方法集。是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。

JAVA类与对象的创建

试验四 类和对象的创建 一.类的定义 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类用来定义对象的模板。 类的实现包括两部分:类声明和类体。基本格式为: 修饰符class类名[extends父类名]{ /*类体的内容*/ } 1.类声明 以下是一个类声明的例子。 class People成为类声明,People是类名。习惯上,类名的第一个字母大写,但这不是必须的。类的名字不能是Java中的关键字,要符合标识符规定,即类的名字可以由字母、下划线、数字或美元符号组成,并且第一个字母不能是数字。但给类命名时,最好遵守下列规则: (1)如果类名使用拉丁字母,那么名字的首写字母使用大写字母,如Hello、Time、People等。 (2)类名最好容易识别,当类名由几个“单词”复合而成时,每个单词的首写字母使用大写,如BeijingTi me、AmericanGame、HelloChina等。 2.类体 编写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。 类体的内容由两部分构成:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。 下面是一个类名为“Trapezia”的类,类体内容的变量定义部分定义了4个float类型变量:top、bottom、h igh和laderArea,方法定义部分定义了两个方法:“getArea”和“setHigh”。

二.对象 1.对象的创建 创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为: 类的名字对象名字; 如: 这里People是类的名字,zhubajie是我们声明的对象的名字。 (2)为声明的对象分配内存。 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(你一定还记得构造方法的名字必须和类名相同这一规定),如: 例1: 「注」如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法。 2.对象的使用 对象不仅可以改变自己变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 例2:

Java技术详细介绍

Java技术详细介绍 Java的历史:微处理的革命最重要的也许就是它使全世界很快拥有3亿台个人计算机成为可能。个人计算机对个人以及对企业的生产管理方都产生了深刻的影响。 本文内容由天搜科技整理提供 Java程序由类组成,类则由方法构成。方法用来执行任务,并在完成任务时返回信息。用户可以编写类和方法,并由此建立一个Java程序,在编写过程中他们还应尽量充分利用Java类库中已存在的丰富的类和方法。类库就是Java API(Applications Programming Interface,应用程序接口).因此学习Java 语言实际上包括两个方面:一方面是学习用Java语言编写自己所需的类和方法,另一方面是学习如何利用Java类库中的类和方法。 Java核心技术有哪四个? 1.Java虚拟机 2.类装载器的体系结构 3.Java class文件 4.Java API 下面分别介绍Java四个核心技术的应用: Java虚拟机 Java虚拟机处于机器和编译程序之间,在任何平台上都提供给编译程序一个共同的接口。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,Java应用程序能够在运行时决定需要安装的类,并且将被不同的类装载器装载的类存放在不同的命名空间。 类装载器的体系结构 一个Java应用程序可以使用两种类装载器:"启动(bootstrap)"类装载器和用户定义的类装载器。启动类装载器(这是系统中唯一的)是Java虚拟机实现的一部分。启动类装载器通常使用某种默认方式从本地磁盘中装载类,包括Java API类(启动类装载器也被称为原始类装载器、系统类装载器或者默认类装载器)。

JAVA事件(台湾)

Java講座(七) Java and Event Handling 圖文?李盈嫻( Luna Lee ) 一、前言 在上一個章節,我們做出了美美的圖形使用者介面,可是,我們做的圖形介面要怎樣才能跟使用者產生互動呢?例如當使用者按下按鈕或移動滑鼠時,程式要做出什麼相對應的動作,畫面會產生什麼變化等等。在此,我們就要藉由『Event Handling』的觀念來完成。本章將會介紹Event的基本觀念,Listener的實作方法,最後並應用到聊天室的範例上。 二、內容 什麼是Event 當我們在寫程式時,多半會需要與使用者互動或回應其指令。在古早古早的以前,若有一支程式想要回應使用者按下滑鼠的動作,可能得要辛苦的寫一大堆code自己去抓相關的資訊。例如,在這支程式被initial 了之後,就要有一支迴圈不斷地去檢查使用者的滑鼠到底被按下去了沒有。這種polling programming的方法,一來浪費系統資源,二來所有要處理的回應與動作都在一個大迴圈中而顯得複雜了許多。 而Java的AWT則採用event-driven programming的方法來達成此目的,當某個特定的事件發生,就會驅動程式去執行某些特定的動作,而可與使用者產生即時的互動。其中有三個要素: ?Event – 意指某個特定的事件、動作,也就是「發生了什麼事件」。例如:視窗關閉、滑鼠移動。 ?Event Source – 產生、觸發事件的元件。例如:Button、TextField。?Event Handler – 負責接收Event object並作處理的Method。 在Java中把Events以物件來表示,並依type分類為不同的classes。有些負責表示較高階的事件(元件本身狀態或內容的改變),如ActionEvent、TextEvent;有些則表示較低階的事件(元件與環境間的溝通,像鍵盤或滑鼠相關的動作),例如KeyEvent、MouseEvent。而除DocumentEvent外,所有event classes的super class皆為java.util.EventObject。 我們在(圖1) 列舉了一些在GUI程式設計中常見,重要的Event classes及其階層關係。(讀者若有需要,也可自行查閱Java API,看看還有哪些Event classes可用。 ) 圖1

2011JAVA程序设计A卷试卷(含答案)

华南农业大学期末考试试卷(A 卷) 2011-2012学年第 1 学期 考试科目: Java 程序设计 考试类型:(闭卷)考试 考试时间: 120 分钟 学号 姓名 年级专业 一、单项选择题(本大题共 25 小题,每小题 2 分,共 50 分) 1. 下列有关Java 程序的说法中正确的是___D_____: A. 由于Java 程序是解释执行的,所以执行前不需要进行编译 B. 一个.java 源程序编译后将产生一个.class 的字节码文件 C. 安装了JDK 后,安装程序会自动配置系统的环境变量path 和classpath D. 面向对象的解释型高级编程语言 2. 下列为合法变量名的是__C______。 A. false B. 0xabc C. iStudent D. cow ?s 3. 对于构造方法,下列叙述不正确的是__C______。 A. 构造方法是类的一种特殊函数,它的方法名必须与类名相同 B. 构造方法没有返回值类型 C. 子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。 D. 子类在创建构造方法是必须把调用父类构造方法放在第一条语句 4. 下列关于接口的说明正确的是__D______。 A. 接口和抽象类是同一回事 B. 一个类不可以实现多个接口 C. 接口间不能有继承关系 D. 实现一个接口必须实现接口的所有方法 5. Java 为移动设备提供的平台是__A______。 A . J2ME B .J2SE C .J2EE D .JDK5.0 6. 下列语句中,属于多分支语句的是__B______。 A .if 语句 B .switch 语句 C .do while 语句 D .for 语句

相关文档
最新文档