Java语言与面向对象程序设计

更新时间:2024-07-05 14:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二章

2-2 编写一个JAVA Application, 利用JDK软件包中的工具编译并运行这个程序,在屏幕上输出“Welcome to Java World!” import java.io.*; public class Application1 { public static void main(String args[]) { System.out.println(\ } }

2-3 编写一个 Java Applet, 使之能够在浏览器中显示”Welcome to Java Applet World!”的字符串信息。

import java.awt.Graphics; import java.applet.Applet;

public class MyApplet1 extends Applet {

public void paint(Graphics g) {

g.drawString(\} }

2-7 Java语言有哪些主要特点

跨平台,封装,继承,多态,抽象

第三章

3-4 Java 对标识符命名有什么规定,下面这些标识符哪些是对的,哪些是错的?错在哪里? (1) MyGame

正确

(2) -isHers

正确

(3) 2JavaProgram

错误,不能以数字开头。

(4) Java-Visual_Machine

错误,标识符中不能使用符号“—”。

(5) -$abc

正确

3-14编写一个Java程序,接受用户输入的一个1~12之间的整数(如果输入的数据不满足这个条件,则要求用户重新输入 ),利用Switch语句输出对应月份的天数.

import java.io.*;

public class MyApplication1 {

public static void main(String args[]) {

int i=0; do { try {

System.out.println(\请输入1~12之间的一个整数:\ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); i = Integer.parseInt(s); }

catch(NumberFormatException nfe) {

System.out.println(\输入格式错误。\ i = -1; } catch(IOException ioe) { System.err.println(ioe.toString()); System.exit(0); }

}while( i<1 || i>12 );

switch(i) { case 1: System.out.println(\月份有31天。\ break; case 2: System.out.println(\月份有28或29天。\ break; case 3:

System.out.println(\月份有31天。\ break; case 4:

System.out.println(\月份有30天。\ break; case 5: System.out.println(\月份有31天。\ break; case 6: System.out.println(\月份有30天。\ break; case 7: System.out.println(\月份有31天。\ break; case 8:

System.out.println(\月份有31天。\ break; case 9:

System.out.println(\月份有30天。\ break; case 10:

System.out.println(\月份有31天。\ break; case 11: System.out.println(\月份有30天。\ break; case 12: System.out.println(\月份有31天。\ break; } } }

3-16 编写图形界面下的 Java Applet 程序,接受用户输入的两个数据为上、下限, 然后输出上、下限之间的所有素数

import java.applet.*; import java.awt.*;

import java.awt.event.*;

public class MyApplet1 extends Applet implements ActionListener {

Label prompt;

TextField ceiling,floor; TextArea result; Button btn;

int max=0,min=0,temp=0;

String resultString = \这个范围内的素数为 \\n\

public void init()

{

prompt = new Label(\请输入欲列出素数的上下限范围:\ ceiling = new TextField(5); floor = new TextField(5); result = new TextArea(8,30);

btn = new Button(\输出\ add(prompt); add(ceiling); add(floor); add(btn); add(result);

btn.addActionListener(this); }

public void actionPerformed(ActionEvent e) { try {

max = Integer.parseInt(ceiling.getText()); min = Integer.parseInt(floor.getText()); if( max < min ) {

temp = max; max = min; min = temp; }

for (int i=min; i<=max; i++)

{

boolean flag = true;

if ( i==2 || i==3 ) {

resultString = resultString + Integer.toString(i) + \ continue; }

if ( i%2 ==0 ) continue; else

for(int j=3; j

if( i%j == 0 ) { flag = false; break; } }

if(flag)

resultString = resultString + Integer.toString(i) + \ }// for(i)

result.setText(resultString);

resultString = \这个范围内的素数为 \\n\ }

catch(NumberFormatException nfe) {

result.setText(\格式错误,请输入正整数。\ }

} }

(5)static方法中不能处理非static的属性。

第五章

5-4 “子类的域和方法的数目一定大于等于父类的域和方法的数目”这种说法是否正确?为什么?

这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能继承所有非私有的域和方法。如果子类在继承之外自己定义的域和方法数目小于父类中私有成员的数目,则子类的域和方法的数目小于父类的域和方法的数目

5-6 什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?

子类重新定义父类中已经存在的方法,称为方法的覆盖。注意:方法覆盖与域的隐藏不同。子类重新定义父类已有的域,并不能完全取代它从父类那 里继承的同名的域,这个域仍然占用子类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方法时,从父类那里继承来的方法将被新方法完全取代,不 再在子类的内存空间中占一席之地。与方法的覆

盖不同,重载不是子类对父类同名方法的重新定义,而是在一个类中定义了同名的不同方法。

5-8 解释this和Supper的意义和作用

关键字this指代当前类的当前对象,关键字super指代当前类的直接父类对象。

5-11 Java程序如何实现多态?有哪些方式? Java程序通过覆盖和重载两种方式来实现多态。覆盖是子类重新定义父类中已有的方法,重载是在一个类内部定义与已存在的方法同名但是参数列表不同的方法。

5-14 构造函数是否可以被重载?试举例。

构造函数就是与类名有相同名称的成员函数,即:类名是a,该类中含有名字为a的成员函数,构造函数是可以重载的。

5-15 什么是包?它的作用是什么?

在Java中,我们写程序时用到相同的类名是有可能的,遇到这种情况的话,就会出现错误。 为了避免上述错误,Sun公司在开发Java时提出了包的的概念,就是package。包可以使具有相同类名的程序互不影响,从而保证了程序的正确性。 你可以理解为包就是一个文件夹,例如有文件夹A和文件夹B,现在有两个类名相同的程序,假设类名都为HelloWorld.java吧。现在把这两个java源文件分别放在文件夹A和文件夹B中,虽然他们的类名相同,但是由于不在同一个文件夹下,两个程序互不影响也可以互相调用。在实际中可以通过包名+类名来调用源程序了。这是和class有关的。

5-17 如何引用包中的某个类?如何引用整个包?如果编写Java Applet程序时不想把整个java.applet包都加载,则应该怎么做? 1. Import xxx 2. Import xxx.*

3. import java.applet.Applet

5-19什么是接口?为什么要定义接口?接口与类有和异同? 答:接口是用来实现类间多重继承功能的结构。它定义了若干个抽象方法和常量用以实现多重继承的功能。

Java语言不支持多重继承,只支持单重继承(只有一个直接父类)。然而在解决实际问题的程序设计中仅靠单重继承尚不能解决更复杂的问题。为了使Java程序的类层次结构更加合理,更符合实际问题的需要,我们把用于完成特定功能的若干属性组织成相对独立的属性集合。这种属性的集合就是接口。 定义接口与定义类非常相似。实际上完全可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类。一个类只能由一个父类,但是它可以同时实现若干个接口。这种情况下如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。与类定义相仿,声明接口时也需要给出访问控制符,不同的是接口的访问控制符只有public一个。用public修饰的接口是公共接口,可以被所有的类和接口使用,而没有public修饰符的接口则只能被同一个包中的其他类和接口利用。接口也具有继承性。定义一个接口是可以通过extends关键字声明该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上的父接口,它

们之间用逗号分隔,形成父接口列表。新接口将继承所有父接口中的属性和方法。

5-20 如何定义接口?使用什么关键字?

接口定义用interface,接口的使用用implements

5-21 一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象方法?

接口的使用用implements, 实现接口就必须重写该接口的所有方法,java中接口里的方法都是抽象的,没有方法体

第六章

6-4 Math.random()方法用来实现什么功能?下面的语句起到什么作用? (int)(Math.random()*6)+1

编程生成100个1~6之间的随机数,统计1~6之间的每个数出现的概率;修改程序,使之生成1000个随机数并统计概率;比较不同的结果并给出结论。

答:Math.random()是用来产生一个0和1(不含1)之间的伪随机数。 (int)(Math.random()*6)+1;该语句的作用是产生1~6之间的一个随机数。

import java.io.*; public class ex6_4 {

public static void main (String[] args) { }

int num=100; int i;

int a[]=new int[7]; int x; String s; for(i=0;i<7;i++) a[i]=0;

for(i=0;i

for(i=1;i<7;i++)

System.out.print(\+(float)a[i]/100+\); try{ }

System.in.read(); }catch(IOException e){}

x=(int)(Math.random()*6)+1; System.out.print(x+\); a[x]++;

当生成100个随机数时,运行结果为:0.15 0.13 0.14 0.19 0.13 0.26,当生成1000个随机

数时,运行结果为:1.58 1.66 1.74 1.58 1.73 1.71。当然,由于数据是随机产生的,每次结果都有所不同,上面的结果只是例举其中一次,比较每次的两种结果,可看出所生成的随机数越多,每个数出现的概率也就越高。

6-6 试述Applet的基本工作原理,系统类Applet属于类库中的哪个包?

系统类 Applet 属于 java.applet 包。Applet 是一个特殊的类似于组件或控件的类, 其工作原理为: 编译好的 Applet 类的字节码文件(.class 文件)被保存在特定的 WWW 服务器 上,同时在同一个或另一个 WWW 服务器上保存着嵌入了该字节码文件名的 HTML 文件。 当某一个浏览器向服务器请求下载嵌入了 Applet 的 HTML 文件时, HTML 文件从 WWW 该 服务器上下载到客户端,由 WWW 浏览器解释 HTML 中的各种标记,按照其约定将文件中 的信息以一定的格式显示在用户屏幕上。当浏览器遇到 HTML 文件中的特殊标记,表明它 嵌有一个 Applet 时, 浏览器会根据这个 Applet 的名字和位置自动把字节码从 WWW 服务器 上下载到本地,并利用本地浏览器本身拥有的 Java 解释器直接执行该字节码。

6-7 Applet 类有哪些方法可以被浏览器自动调用?简述它们的作用。

Applet 类中可以被浏览器自动调用的方法有: init() 用来完成主类实例的初始化工作。 start() 用来启动浏览器运行 Applet 的主线程。 paint()用来在 Applet 的界面中显示文字、图形和其他界面元素。 stop() 是 start()方法的逆操作。 destroy() 在结束当前 Applet 实例时完成一些释放资源、关闭连接的操作。

6-8 编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度,编写对应的HTML文件运行这个Applet import java.applet.*;

import java.awt.*;

public class ch6_e6_8 extends Applet { TextField tf=new TextField(); int tfLength=0; public void init() { try { tfLength=Integer.parseInt(getParameter(\ tf.setColumns(tfLength); add(tf); } catch(NumberFormatException nfe) { tf.setText(\文件传人的参数格式错误。\ add(tf); } } }

ch6_e6_8.html

ch6_e6_8



6-9 Applet和paint()方法有一个类型的形式参数?利用它可以完成什么操作?

是Graphics类型的参数,主要作用就是在重载的paint方法中在图形界面进行各种绘画。

6-11编程求一个整数数组的最大值、最小值、平均值和所有数组元素的和。

import java.io.*; public class ex6_11 {

public static void main (String[] args) {

int array[]; int num=10; int i;

int max,min,sum; float average; array=new int[num]; for(i=0;i

array[i]=(int)(Math.random()*num)+1; max=min=sum=array[0]; for(i=1;i

average=(float)sum/num;

if(maxarray[i]) min=array[i]; sum+=array[i];

{

redLbl.setBackground(Color.red);

yellowLbl.setBackground(Color.yellow); blueLbl.setBackground(Color.blue);

add(redLbl); add(yellowLbl); add(blueLbl); } }

7-7 改写例7-4代码,让用户输入欲显示的.gif文件名,程序将这个图像文件加载到内存并显示。

import java.applet.*; import java.awt.*;

import java.awt.event.*;

public class ch7_e7_7 extends Applet implements ActionListener {

Label promptLbl = new Label(\请输入欲显示的图像文件名:\ TextField inputTfd = new TextField(20);

Button getImageBtn = new Button(\显示图像\ Image myImage;

public void init() {

add(promptLbl); add(inputTfd); add(getImageBtn);

inputTfd.setText(\

getImageBtn.addActionListener(this); }

public void paint(Graphics g) {

if(myImage != null)

g.drawImage(myImage,10,100,this); }

public void actionPerformed(ActionEvent ae) {

if(ae.getSource() == getImageBtn) {

String str = inputTfd.getText().trim();

//System.out.println(str.substring(Math.max(0,str.length()-4)) + \ if(!(str.substring(Math.max(0,str.length()-4)).equals(\ str = str.trim() + \ //System.out.println(str + \

myImage = getImage(getDocumentBase(),str); repaint(); } } }

7-15 编写Applet,界面上包括一个标签,一个文本框和一个按钮。当用户单击按钮时,程序把文本框中的内容复制到标签中。 import java.applet.Applet; import java.awt.*;

import java.awt.event.*;

public class ch7_e7_15 extends Applet implements ActionListener {

Label outputLbl = new Label(\ \ TextField inputTfd = new TextField(10); Button copyBtn = new Button(\复制\

public void init() {

inputTfd.setText(\

outputLbl.setText(\ \ add(inputTfd); add(copyBtn); add(outputLbl);

copyBtn.addActionListener(this); }

public void actionPerformed(ActionEvent ae) {

if(ae.getSource() == copyBtn) {

outputLbl.setText(inputTfd.getText()); }

} }

7-18 将例7-8~例7-10综合成一个程序,使用Checkbox标志按钮的背景色,使用CheckboxGroup标志三种字体风格,使用Choice选择字号,使用List选择字体名称,由用户确定按钮的背景色和前景字符的显示效果。 import java.applet.*; import java.awt.*;

import java.awt.event.*;

public class ch7_e7_18 extends Applet implements ItemListener {

Checkbox ckb = new Checkbox(\背景色\ CheckboxGroup style = new CheckboxGroup(); Checkbox p = new Checkbox(\普通\ Checkbox b = new Checkbox(\黑体\ Checkbox i = new Checkbox(\斜体\ Choice size = new Choice();

Button btn = new Button(\效果\

public void init() {

add(ckb); add(p); add(b); add(i);

size.add(\ size.add(\ size.add(\ add(size); add(btn);

p.addItemListener(this); b.addItemListener(this); i.addItemListener(this); ckb.addItemListener(this); size.addItemListener(this); }

public void itemStateChanged(ItemEvent e) {

Checkbox temp;

Font oldF = btn.getFont(); String s; int si;

if(e.getItemSelectable() instanceof Checkbox) {

temp = (Checkbox)(e.getItemSelectable()); if(temp.getLabel()==\背景色\ if(temp.getState())

btn.setBackground(Color.cyan); else

btn.setBackground(Color.gray);

else if(temp.getLabel()==\普通\

btn.setFont(new Font(oldF.getName(),Font.PLAIN,oldF.getSize())); else if(temp.getLabel()==\黑体\

btn.setFont(new Font(oldF.getName(),Font.BOLD,oldF.getSize())); else if(temp.getLabel()==\斜体\

btn.setFont(new Font(oldF.getName(),Font.ITALIC,oldF.getSize())); }

else if(e.getItemSelectable() instanceof Choice) {

Choice ctemp = (Choice)(e.getItemSelectable()); s = ctemp.getSelectedItem(); si = Integer.parseInt(s);

btn.setFont(new Font(oldF.getName(),oldF.getStyle(),si)); repaint(); } } }

7-20 编写一个Applet响应鼠标事件,用户可以通过拖动鼠标在Applet中画出矩形,并在状态条显示鼠标当前位置。 import java.applet.Applet; import java.awt.*;

import java.awt.event.*;

public class ch7_e7_20 extends Applet implements MouseListener, MouseMotionListener {

int beginX=0, beginY=0, endX=0, endY=0; public void init() {

this.addMouseListener(this);

this.addMouseMotionListener(this); }

public void paint(Graphics g) {

int x1,x2,y1,y2;

if(beginX < endX) {

x1 = beginX; x2 = endX; } else {

x1 = endX; x2 = beginX; }

if(beginY < endY) {

y1 = beginY; y2 = endY; } else {

y1 = endY; y2 = beginY; }

g.drawRect(x1,y1,x2-x1,y2-y1); }

public void mouseClicked(MouseEvent me) { }

public void mouseEntered(MouseEvent me) { }

public void mouseExited(MouseEvent me) { }

public void mousePressed(MouseEvent me) {

beginX = endX = me.getX(); beginY = endY = me.getY(); }

public void mouseReleased(MouseEvent me) { }

public void mouseMoved(MouseEvent me) {

showStatus(\ }

public void mouseDragged(MouseEvent me) {

endX = me.getX(); endY = me.getY();

showStatus(\ repaint(); } }

7-22 改写7-18题的程序,使用一个CANVAS及其上的字符串来显示各选择组件确定的显示效果。

import java.applet.*; import java.awt.*;

import java.awt.event.*;

public class ch7_e7_22 extends Applet implements ItemListener {

Checkbox ckb = new Checkbox(\背景色\ CheckboxGroup style = new CheckboxGroup(); Checkbox p = new Checkbox(\普通\ Checkbox b = new Checkbox(\黑体\ Checkbox i = new Checkbox(\斜体\ Choice size = new Choice();

MyCanvas myCanvas = new MyCanvas();

public void init() {

add(ckb); add(p); add(b); add(i);

size.add(\ size.add(\ size.add(\ add(size);

add(myCanvas);

//myCanvas.setVisible(true); //myCanvas.requestFocus();

myCanvas.setSize(new Dimension(400,200));

p.addItemListener(this); b.addItemListener(this); i.addItemListener(this); ckb.addItemListener(this); size.addItemListener(this); }

public void itemStateChanged(ItemEvent e) {

Checkbox temp;

Font oldF = myCanvas.getFont(); String s; int si;

if(e.getItemSelectable() instanceof Checkbox) {

temp = (Checkbox)(e.getItemSelectable()); if(temp.getLabel()==\背景色\ if(temp.getState())

myCanvas.setBackground(Color.cyan); else

myCanvas.setBackground(Color.gray);

else if(temp.getLabel()==\普通\

myCanvas.setFont(new Font(oldF.getName(),Font.PLAIN,oldF.getSize())); else if(temp.getLabel()==\黑体\

myCanvas.setFont(new Font(oldF.getName(),Font.BOLD,oldF.getSize())); else if(temp.getLabel()==\斜体\

myCanvas.setFont(new Font(oldF.getName(),Font.ITALIC,oldF.getSize())); repaint(); }

else if(e.getItemSelectable() instanceof Choice) {

Choice ctemp = (Choice)(e.getItemSelectable()); s = ctemp.getSelectedItem(); si = Integer.parseInt(s);

myCanvas.setFont(new Font(oldF.getName(),oldF.getStyle(),si)); repaint(); } } }

class MyCanvas extends Canvas {

public void paint(Graphics g) {

g.drawString(\ } }

7-23 什么是容器的布局策略?试例举并简述JAVA中常用的几种布局策略

容器的布局策略用来指定这个容器如何组织其中各控件的相互显示位置关系。Java中常用的布局策略有:FlowLayout,BorderLayout,CardLayout,GridLayout,GridBagLayout。

7-27 将7-15题改写为图形界面的Application程序。 import java.awt.*;

import java.awt.event.*;

public class ch7_e7_27 {

public static void main(String args[]) {

new MyFrame(); } }

class MyFrame extends Frame

implements ActionListener, WindowListener {

Label outputLbl = new Label(\ \ TextField inputTfd = new TextField(10); Button copyBtn = new Button(\复制\

MyFrame() {

super(\我的窗口\ inputTfd.setText(\

outputLbl.setText(\ \ setLayout(new FlowLayout()); add(inputTfd); add(copyBtn); add(outputLbl);

copyBtn.addActionListener(this); addWindowListener(this);

//setSize(300,200); //setVisible(true); pack(); show(); }

public void actionPerformed(ActionEvent ae) {

if(ae.getSource() == copyBtn) {

outputLbl.setText(inputTfd.getText()); } }

public void windowClosing(WindowEvent we) {

dispose();

System.exit(0); }

public void windowActivated(WindowEvent we){} public void windowClosed(WindowEvent we){}

public void windowDeactivated(WindowEvent we){} public void windowOpened(WindowEvent we){} public void windowIconified(WindowEvent we){} public void windowDeiconified(WindowEvent we){} }

7-30 编写图形界面的Application程序,包含一个菜单,选择这个菜单的“退出”选项可以关闭Application的窗口并结束程序。 import java.awt.*;

import java.awt.event.*;

public class ch7_e7_30 {

public static void main(String args[]) {

new MyFrame(); } }

class MyFrame extends Frame implements ActionListener {

MenuBar m_MenuBar; Menu menuFile;

MenuItem mi_File_Exit;

MyFrame() {

super(\我的窗口\

m_MenuBar = new MenuBar();

menuFile = new Menu(\文件\

mi_File_Exit = new MenuItem(\退出\ mi_File_Exit.setActionCommand(\退出\ mi_File_Exit.addActionListener(this); menuFile.add(mi_File_Exit); m_MenuBar.add(menuFile);

this.setMenuBar(m_MenuBar);

this.addWindowListener(new closeWindow());

setSize(300,200); setVisible(true); }

public void actionPerformed(ActionEvent ae) {

if(ae.getActionCommand().equals(\退出\ {

dispose();

System.exit(0); } } }

class closeWindow extends WindowAdapter {

public void windowClosing(WindowEvent we)

{

Frame frm = (Frame)we.getWindow(); frm.dispose(); System.exit(0); } }

7-35 编写一个JApplet程序,包含一个JLabel对象,显示你的姓名。 import javax.swing.*; import java.awt.*;

public class ch8_e8_14 extends JApplet { JLabel myLbl=new JLabel(\; public void init() {

Container c=getContentPane(); c.add(\,myLbl); } }

7-36 JButton与Button相比增加了什么新的功能?编写一个图形界面的Application程序,包含一个带图标的JButton对象,当用户单击这个按钮时,Application把其Frame的标题修改为“单击按钮!” import javax.swing.*; import java.awt.*;

import java.awt.event.*; public class ch8_e8_15 { public static void main(String args[]) { new MyFrame(); } }

class MyFrame extends Frame implements ActionListener { JButton myButton=new JButton(\; MyFrame() { super(\我的窗口\; add(\,myButton); myButton.addActionListener(this); addWindowListener(new closeWin()); setSize(300,200); setVisible(true); }

public void actionPerformed(ActionEvent ae) { if(ae.getSource()==myButton) {

setTitle(\单击按钮!\; } } }

class closeWin extends WindowAdapter { public void windowClosing(WindowEvent we) {

} 第八章

8-1 什么是异常? Java为什么要引入异常处理机制?系统定义的异常类在异常处理机制中有什么作用

}

we.getwindow().dispose(); System.exit(0);

异常是当程序运行的时候,由于各种不可避免的原因而产生的错误。

Java程序把运行中各种可能出现的错误都看作异常,Java提供的异常情况处理机制叫异常处理。Java 提供了两种不同的异常抛出机制:throws抛出异常和 throw 抛出异常。throws抛出异常又叫间接抛出异常,throw抛出异常又叫直接抛出异常。throws抛出异常和方法说明联系在一起,是针对以下情况:调用的方法抛出了异常、检测到了错误并使用throw语句抛出异常、程序代码有错误从而异常。方法中出现的异常由catch语句捕获,进行处理。

8-3 系统异常如何抛出?程序中如何抛出用户自定义异常?

Java 提供了两种不同的异常抛出机制:throws抛出异常和 throw 抛出异常。throws抛出异常又叫间接抛出异常,throw抛出异常又叫直接抛出异常。throws抛出异常和方法说明联系在一起,是针对以下情况:调用的方法抛出了异常、检测到了错误并使用throw语句抛出异常、程序代码有错误从而异常。方法中出现的异常由catch语句捕获,进行处理。

8-5 Java程序如何处理被抛出的异常?谁负责捕捉异常?为什么catch块要紧跟在try块后面?每个catch块可以处理几种异常?如果try块中可能产生多种异常,应如何处理?

8-7 线程有哪5个基本的状态?它们之间如何转换,简述线程的生命周期

Java中的线程有五种基本状态:新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked)和死亡状态(Dead)

8-8 什么是线程调度? Java的线程调度采用什么策略

1. 线程调度是指按照特定机制为多个线程分配CPU的使用权.

2. 轮转 加 优先级

8-10 如何在Java程序中实现多线程?试简述使用Thread子类和实现Runnable接口两种方法的异同

Java中编程实现多线程应用有两种途径:一种是Thread子类创建用户自己的线程子类,一种是在用户自己的类中实现Runnable接口。无论哪种方法,都需要使用到Java基础类库中的Thread类及其方法。

两种创建线程方法的比较 (1)直接继承线程Thread类

该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能再继承其他类。 (2)实现Runnable接口。

当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序

8-13 Java的输入输出类库是什么?Java的基本输入输出类是什么?流式输入输出的特点是什么?

Java的输入输出类库:System.io

Java的基本输入输出类: System.in, System.out

流式输入输出的特点是数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出之后才能被读写。所以流和队列一样,只能以“先进先出”的方式对其中的数据进行读写,而不能随意选择读写的位置。

本文来源:https://www.bwwdw.com/article/32e.html

Top