Java要点和《疯狂Java讲义》例程整理(六)

2014-11-24 03:26:37 · 作者: · 浏览: 7
st(); } catch(IOException e) { System.out.println("catch the exception"); } } }

throw 用法

import java.io.FileInputStream;
import java.io.IOException;

public class Test {
	public static void test() throws IOException
	{
		throw new IOException("haha");
	}
	public static void main(String[] args)
	{
		try{
			test();
		}
		catch(IOException e)
		{
			System.out.println(e.getMessage());
		}
	}
}

haha

自定义异常类

public class AuctionException extends Exception
{
	public AuctionException(){}
	
	public AuctionException(String msg)
	{
		super(msg);
	}
}

Throw All

try
{
...
}
catch (Throwable t)
{
...
}

练习

import java.io.IOException;

import javax.swing.JFrame;

public class Test {
	public static void main(String[] args)
	{
		int i;
		for(i=0; i<3; i++)
		{
			try{
				System.out.println("i="+i);
				throw new MyException();
			}
			catch(MyException e)
			{
				System.out.println(e.Say());
			}
		}
	}
}

class MyException extends Exception
{
	static int intNumber = 0;
	MyException()
	{
		intNumber++;
	}
	String Say()
	{
		return "No"+intNumber+":MyException!";
	}
}

i=0
No1:MyException!
i=1
No2:MyException!
i=2
No3:MyException!


IO

FIle类

代表与平台无关的文件和目录,能操作文件和目录,但是不能访问文件本身。

IO流

字节流和字符流 字节流最小数据单元是8位的字节,字符流是16位的字符 字节流主要由InputStream, OutputStream作为基类,字符流主要由Reader和Writer作为基类,他们都是抽象类

对象序列化

P678,679
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Test {
	public static void main(String[] args) throws Exception
	{
		try{
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
			Person per = new Person("Tom", 13);
			oos.writeObject(per);
			oos.close();
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		
		try{
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Object.txt"));
			Person p = (Person)ois.readObject();
			System.out.println("name:"+p.name+",age:"+p.age);
			ois.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

class Person implements Serializable
{
	public String name;
	public int age;
	
	public Person(String name, int age)
	{
		this.name = name;
		this.age = age;
	}
}

name:Tom,age:13

GUI

组件、容器、布局管理器的关系

组件Component代表一个能以图形化方式显示出来,并且可以和用户交互的对象
容器Container是一种特殊的组件,是可以盛装组件的组件布局管理器是容器管理它里面组件布局的方式

Panel

AWT中典型的容器,可作为容器来盛装其他组件,为放置提供空间不能单独存在,必须放置到其他容器中默认使用FLowLayout作为其布局管理器

Frame

Frame代表常见的窗口,是Window类的子类Frame对象有标题,允许通过拖拉来改变窗口的位置,大小初始化时不可见,可用setVisible(true)使其显示出来默认使用BorderLayout作为其布局管理器
import java.awt.*;

public class Test extends java.applet.Applet{
	Choice testChoice;
	List testList;
	public void init()
	{
		testChoice = new Choice();
		testList = new List();
		for(int i=1; i<=3; i++){
			testChoice.addItem(String.valueOf(i));
			testList.addItem("Item "+i);
		}
		setLayout(new FlowLayout());
		add(testChoice);
		add(testList);
	}
	
	public static void main(String[] args)
	{
		new Test();
	}
}


布局管理器

每个容器都有默认的布局管理器,也可以通过如下代码设置
c.setLayout(new XXXLayout());
Window容器可以通过pack()方法把窗口调整到最佳大小
AWT提供了FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout 五种布局,Swing还提供了BoxLayout FlowLayout中,组件像水流一样向某方向流动(排列),遇到边界就另起一行重新开始拍列BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个位置,普通组件被放在五个位置中的任一位置,因此BorderLayout最多只能放5个组件,向同一位置添加多个组件时,后添加的覆盖先添加的。GridLayout将容器分割成纵横线分隔的网格,每个网格占的大小相同,默认从左到右,从上到下添加组件GridBagLayout类似GridLayout,但是一个组件可以跨越多个网格,使用GridBagLayoutConstraint控制CardLayout以时间而非空间来管理它里面的组件,它将加入容器的所有组件看成一叠卡片,每次只有最上面的容器才可见。绝对定位,首先调用容器方法setLayout(null),然后向容器添加组件时,先调用setBounds()或setSize(),再将组件添加到容器中。BoxLayout可以在垂直和水平两个方