Java高级编程知识总结及复习(三)
1、异常处理
try-catch-finally异常捕获处理机制
public class Demo101 {
public static void main(String
[] args
) {
int x
= 10;
int y
= 0;
try{
System
.out
.println(x
/ y
);
}catch (ArithmeticException e
){
System
.out
.println("处理被除数为0的异常");
e
.printStackTrace();
}catch (Exception e
){
System
.out
.println("处理其他异常");
e
.printStackTrace();
}finally {
System
.out
.println("一定会执行的部分");
}
System
.out
.println("异常处理成功");
}
}
处理被除数为0的异常
java
.lang
.ArithmeticException:
/ by zero
at Demo101
.main
(Demo101
.java:6
)
一定会执行的部分
异常处理成功
throws声明抛出异常处理机制
class MyMath02 {
public static int div(int x
, int y
) throws Exception
{
int temp
= 0;
System
.out
.println("开始");
try {
temp
= x
/ y
;
} catch (Exception e
) {
throw e
;
} finally {
System
.out
.println("结束");
}
return temp
;
}
}
public class Demo04 {
public static void main(String
[] args
) {
try {
System
.out
.println(MyMath02
.div(10, 0));
} catch (Exception e
) {
e
.printStackTrace();
}
}
}
自定义异常
class BombException extends RuntimeException{
public BombException(String msg
){
super(msg
);
}
}
class Food{
public static void eat(int num
) throws BombException
{
if (num
> 10){
throw new BombException("吃太多了,肚子爆了");
}else {
System
.out
.println("正常开始吃,不怕吃胖");
}
}
}
public class Demo6 {
public static void main(String
[] args
){
try{
Food
.eat(11);
}catch (BombException e
){
e
.printStackTrace();
}catch (Exception e
){
e
.printStackTrace();
}
}
}
ArrayList数据的添加和输出(迭代器)
import java
.util
.*
;
public class Demo102 {
public static void main(String
[] args
) {
ArrayList
<String> list
= new ArrayList<>();
list
.add("北京");
list
.add("上海");
list
.add("广州");
list
.add("深圳");
list
.add("成都");
list
.add("杭州");
for (String e
: list
) {
System
.out
.println(e
);
}
System
.out
.println("------------------------------------------------");
list
.add(1,"日本");
Iterator
<String> iterator
= list
.iterator();
while (iterator
.hasNext()){
System
.out
.println(iterator
.next());
}
System
.out
.println("元素个数"+list
.size());
System
.out
.println("日本是否存在:"+list
.contains("日本"));
list
.remove("日本");
}
}
文件的输入和输出
字节输入流
import java
.io
.*
;
import java
.util
.Scanner
;
public class Demo103 {
public static void main(String
[] args
) {
Scanner scanner
= new Scanner(System
.in
);
FileOutputStream fileOutputStream
= null
;
try {
fileOutputStream
= new FileOutputStream("test.txt");
System
.out
.println("请输入内容");
String str
= scanner
.nextLine();
fileOutputStream
.write(str
.getBytes());
System
.out
.println("已保存");
} catch (IOException e
) {
e
.printStackTrace();
} finally {
try {
fileOutputStream
.close();
scanner
.close();
} catch (IOException e
) {
e
.printStackTrace();
}
}
System
.out
.println("------------------------");
System
.out
.println("读取数据");
FileInputStream fileInputStream
= null
;
try {
fileInputStream
= new FileInputStream("test.txt");
byte[] bytes
= new byte[1024];
int hasRead
= 0;
while ((hasRead
= fileInputStream
.read(bytes
)) > 0) {
System
.out
.println(new String(bytes
, 0, hasRead
));
}
} catch (IOException e
) {
e
.printStackTrace();
} finally {
try {
fileInputStream
.close();
} catch (IOException e
) {
e
.printStackTrace();
}
}
}
}
字符输入流
import java
.io
.BufferedReader
;
import java
.io
.FileReader
;
import java
.io
.FileWriter
;
import java
.io
.IOException
;
import java
.util
.Scanner
;
public class Demo104 {
public static void main(String
[] args
) {
Scanner scanner
= new Scanner(System
.in
);
FileWriter fileWriter
= null
;
try {
fileWriter
= new FileWriter("text.txt");
System
.out
.println("请输入内容");
String str
= scanner
.nextLine();
fileWriter
.write(str
);
System
.out
.println("已保存");
}catch (IOException e
){
e
.printStackTrace();
}finally {
try {
fileWriter
.close();
scanner
.close();
}catch (IOException e
){
e
.printStackTrace();
}
}
System
.out
.println("读取数据");
BufferedReader bufferedReader
= null
;
try{
bufferedReader
= new BufferedReader(new FileReader("text.txt"));
String result
= null
;
while ((result
= bufferedReader
.readLine())!=null
){
System
.out
.println(result
);
}
}catch (IOException e
){
e
.printStackTrace();
}finally {
try {
bufferedReader
.close();
}catch (IOException e
){
e
.printStackTrace();
}
}
}
}
对象流的输入和输出(对象序列化)
import java
.io
.*
;
class Student105 implements Serializable {
private String studentId
;
private String name
;
private int age
;
public Student105(String studentId
, String name
, int age
) {
this.studentId
= studentId
;
this.name
= name
;
this.age
= age
;
}
public String
getStudentId() {
return studentId
;
}
public void setStudentId(String studentId
) {
this.studentId
= studentId
;
}
public String
getName() {
return name
;
}
public void setName(String name
) {
this.name
= name
;
}
public int getAge() {
return age
;
}
public void setAge(int age
) {
this.age
= age
;
}
@Override
public String
toString() {
return "姓名:" + this.name
+ ",学号:" + this.studentId
+ ",年龄:" + this.age
;
}
}
public class Demo105 {
public static void main(String
[] args
) {
System
.out
.println("序列化");
try (ObjectOutputStream objectOutputStream
= new ObjectOutputStream(new FileOutputStream("object.txt"))) {
Student105 student1
= new Student105("17031000", "张三", 20);
objectOutputStream
.writeObject(student1
);
objectOutputStream
.flush();
System
.out
.println("序列化完毕");
} catch (Exception e
) {
e
.printStackTrace();
}
System
.out
.println("反序列化");
try (ObjectInputStream objectIutputStream
= new ObjectInputStream(new FileInputStream("object.txt"))) {
Student105 student
= (Student105
) objectIutputStream
.readObject();
System
.out
.println("反序列化完毕,读出结果如下");
System
.out
.println(student
);
} catch (Exception e
) {
e
.printStackTrace();
}
}
}
树结构(计算机系组织结构图)
import javax
.swing
.*
;
import javax
.swing
.event
.TreeSelectionEvent
;
import javax
.swing
.event
.TreeSelectionListener
;
import javax
.swing
.tree
.DefaultMutableTreeNode
;
import javax
.swing
.tree
.DefaultTreeModel
;
import javax
.swing
.tree
.TreePath
;
import javax
.swing
.tree
.TreeSelectionModel
;
import java
.awt
.*
;
public class Demo106 extends JFrame {
private DefaultMutableTreeNode root
;
private DefaultTreeModel model
;
private JTree tree
;
private JTextArea textArea
;
private JPanel panel
;
public Demo106() {
super("计算机系组织结构图");
root
= makeSampleTree();
model
=new DefaultTreeModel(root
);
tree
= new JTree(model
);
tree
.getSelectionModel().setSelectionMode(TreeSelectionModel
.SINGLE_TREE_SELECTION
);
tree
.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e
) {
TreePath path
= tree
.getSelectionPath();
if (path
==null
){
return;
}
DefaultMutableTreeNode selectedNode
= (DefaultMutableTreeNode
) path
.getLastPathComponent();
textArea
.setText(selectedNode
.getUserObject().toString());
}
});
panel
= new JPanel(new GridLayout(1,2));
panel
.add(new JScrollPane(tree
));
textArea
= new JTextArea();
panel
.add(new JScrollPane(textArea
));
this.add(panel
);
this.setSize(400,300);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
this.setVisible(true);
}
public DefaultMutableTreeNode
makeSampleTree() {
DefaultMutableTreeNode root
= new DefaultMutableTreeNode("西安交通大学城市学院");
DefaultMutableTreeNode jisuanji
= new DefaultMutableTreeNode("计算机系");
DefaultMutableTreeNode dianxin
= new DefaultMutableTreeNode("电信系");
DefaultMutableTreeNode jixie
= new DefaultMutableTreeNode("机械系");
DefaultMutableTreeNode tujian
= new DefaultMutableTreeNode("土建系");
root
.add(jisuanji
);
root
.add(dianxin
);
root
.add(jixie
);
root
.add(tujian
);
DefaultMutableTreeNode jike
= new DefaultMutableTreeNode("计算机科学与技术");
DefaultMutableTreeNode ruanjian
= new DefaultMutableTreeNode("软件工程");
DefaultMutableTreeNode wulianwang
= new DefaultMutableTreeNode("物联网工程");
DefaultMutableTreeNode wangluo
= new DefaultMutableTreeNode("网络工程");
jisuanji
.add(jike
);
jisuanji
.add(ruanjian
);
jisuanji
.add(wulianwang
);
jisuanji
.add(wangluo
);
return root
;
}
public static void main(String
[] args
) {
new Demo106();
}
}
银行账号(线程同步)
同步代码块
class BankAccount107 {
private String bankNo
;
private double balance
;
public BankAccount107(String bankNo
, double balance
) {
this.bankNo
= bankNo
;
this.balance
= balance
;
}
public String
getBankNo() {
return bankNo
;
}
public void setBankNo(String bankNo
) {
this.bankNo
= bankNo
;
}
public double getBalance() {
return balance
;
}
public void setBalance(double balance
) {
this.balance
= balance
;
}
}
public class Demo107 extends Thread {
private BankAccount107 account
;
private double money
;
public Demo107(String name
, BankAccount107 account
, double money
) {
super(name
);
this.account
= account
;
this.money
= money
;
}
@Override
public void run() {
synchronized (this.account
) {
double d
= this.account
.getBalance();
if (money
< 0 && d
< -money
) {
System
.out
.println(this.getName() + "操作失败,余额不足");
return;
} else {
d
+= money
;
System
.out
.println("操作成功,余额为:" + d
);
try {
sleep(1);
} catch (InterruptedException e
) {
e
.printStackTrace();
}
this.account
.setBalance(d
);
}
}
}
public static void main(String
[] args
) {
BankAccount107 account
= new BankAccount107("6102021100", 5000);
Demo107 demo1
= new Demo107("T001", account
, 1000);
Demo107 demo2
= new Demo107("T002", account
, -2000);
Demo107 demo3
= new Demo107("T003", account
, -3000);
Demo107 demo4
= new Demo107("T004", account
, -2000);
Demo107 demo5
= new Demo107("T005", account
, 1000);
Demo107 demo6
= new Demo107("T006", account
, -1000);
Demo107 demo7
= new Demo107("T007", account
, 3000);
Demo107 demo8
= new Demo107("T008", account
, -5000);
demo1
.start();
demo2
.start();
demo3
.start();
demo4
.start();
demo5
.start();
demo6
.start();
demo7
.start();
demo8
.start();
try {
demo1
.join();
demo2
.join();
demo3
.join();
demo4
.join();
demo5
.join();
demo6
.join();
demo7
.join();
demo8
.join();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
System
.out
.println("账号:" + account
.getBankNo() + ",余额:" + account
.getBalance());
}
}
同步方法
class BankAccount108 {
private String bankNo
;
private double balance
;
public BankAccount108(String bankNo
, double balance
) {
this.bankNo
= bankNo
;
this.balance
= balance
;
}
public String
getBankNo() {
return bankNo
;
}
public void setBankNo(String bankNo
) {
this.bankNo
= bankNo
;
}
public double getBalance() {
return balance
;
}
public void setBalance(double balance
) {
this.balance
= balance
;
}
public synchronized void access(double money
) {
if (money
< 0 && balance
< -money
) {
System
.out
.println(Thread
.currentThread().getName() + "操作失败,余额不足");
return;
} else {
balance
+= money
;
System
.out
.println("操作成功,余额为:" + balance
);
try {
Thread
.sleep(1);
} catch (InterruptedException e
) {
e
.printStackTrace();
}
}
}
}
public class Demo108 extends Thread {
private BankAccount108 account
;
private double money
;
public Demo108(String name
, BankAccount108 account
, double money
) {
super(name
);
this.account
= account
;
this.money
= money
;
}
@Override
public void run() {
this.account
.access(money
);
}
public static void main(String
[] args
) {
BankAccount108 account
= new BankAccount108("6102021100", 5000);
Demo108 demo1
= new Demo108("T001", account
, 1000);
Demo108 demo2
= new Demo108("T002", account
, -2000);
Demo108 demo3
= new Demo108("T003", account
, -3000);
Demo108 demo4
= new Demo108("T004", account
, -2000);
Demo108 demo5
= new Demo108("T005", account
, 1000);
Demo108 demo6
= new Demo108("T006", account
, -1000);
Demo108 demo7
= new Demo108("T007", account
, 3000);
Demo108 demo8
= new Demo108("T008", account
, -5000);
demo1
.start();
demo2
.start();
demo3
.start();
demo4
.start();
demo5
.start();
demo6
.start();
demo7
.start();
demo8
.start();
try {
demo1
.join();
demo2
.join();
demo3
.join();
demo4
.join();
demo5
.join();
demo6
.join();
demo7
.join();
demo8
.join();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
System
.out
.println("账号:" + account
.getBankNo() + ",余额:" + account
.getBalance());
}
}
同步锁
import java
.util
.concurrent
.locks
.ReentrantLock
;
class BankAccount109 {
private String bankNo
;
private double balance
;
private final ReentrantLock lock
= new ReentrantLock();
public BankAccount109(String bankNo
, double balance
) {
this.bankNo
= bankNo
;
this.balance
= balance
;
}
public String
getBankNo() {
return bankNo
;
}
public void setBankNo(String bankNo
) {
this.bankNo
= bankNo
;
}
public double getBalance() {
return balance
;
}
public void setBalance(double balance
) {
this.balance
= balance
;
}
public void access(double money
) {
lock
.lock();
try {
if (money
< 0 && balance
< -money
) {
System
.out
.println(Thread
.currentThread().getName() + "操作失败,余额不足");
return;
} else {
balance
+= money
;
System
.out
.println("操作成功,余额为:" + balance
);
try {
Thread
.sleep(1);
} catch (InterruptedException e
) {
e
.printStackTrace();
}
}
} finally {
lock
.unlock();
}
}
}
public class Demo109 extends Thread {
private BankAccount109 account
;
private double money
;
public Demo109(String name
, BankAccount109 account
, double money
) {
super(name
);
this.account
= account
;
this.money
= money
;
}
@Override
public void run() {
this.account
.access(money
);
}
public static void main(String
[] args
) {
BankAccount109 account
= new BankAccount109("6102021100", 5000);
Demo109 demo1
= new Demo109("T001", account
, 1000);
Demo109 demo2
= new Demo109("T002", account
, -2000);
Demo109 demo3
= new Demo109("T003", account
, -3000);
Demo109 demo4
= new Demo109("T004", account
, -2000);
Demo109 demo5
= new Demo109("T005", account
, 1000);
Demo109 demo6
= new Demo109("T006", account
, -1000);
Demo109 demo7
= new Demo109("T007", account
, 3000);
Demo109 demo8
= new Demo109("T008", account
, -5000);
demo1
.start();
demo2
.start();
demo3
.start();
demo4
.start();
demo5
.start();
demo6
.start();
demo7
.start();
demo8
.start();
try {
demo1
.join();
demo2
.join();
demo3
.join();
demo4
.join();
demo5
.join();
demo6
.join();
demo7
.join();
demo8
.join();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
System
.out
.println("账号:" + account
.getBankNo() + ",余额:" + account
.getBalance());
}
}
登录界面+事件处理
import javax
.swing
.*
;
import java
.awt
.*
;
import java
.awt
.event
.ActionEvent
;
import java
.awt
.event
.ActionListener
;
public class Demo110 extends JFrame {
private JPanel panel
;
private JLabel labelname
, labelpassword
, labelmsg
;
private JTextField textFieldname
;
private JPasswordField passwordField
;
private JButton buttonSumbit
, buttonReset
;
public Demo110() {
super("登录界面");
panel
= new JPanel(null
);
labelname
= new JLabel("用户名");
labelpassword
= new JLabel("密码");
labelmsg
= new JLabel();
labelmsg
.setForeground(Color
.red
);
textFieldname
= new JTextField(20);
passwordField
= new JPasswordField(20);
passwordField
.setEchoChar('*');
buttonSumbit
= new JButton("登录");
buttonReset
= new JButton("取消");
buttonSumbit
.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e
) {
labelmsg
.setText("");
String stringName
= textFieldname
.getText();
System
.out
.println("用户名:" + stringName
);
if (stringName
== null
|| stringName
.equals("")) {
labelmsg
.setText("用户名不能为空");
return;
}
String stringPassword
= passwordField
.getText();
System
.out
.println("密码:" + stringPassword
);
if (stringPassword
== null
|| stringPassword
.equals("")) {
labelmsg
.setText("密码不能为空");
return;
}
labelmsg
.setText("登录成功");
}
});
buttonReset
.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e
) {
textFieldname
.setText("");
passwordField
.setText("");
labelmsg
.setText("");
}
});
labelname
.setBounds(30, 30, 60, 25);
labelpassword
.setBounds(30, 100, 60, 25);
textFieldname
.setBounds(95, 30, 125, 25);
passwordField
.setBounds(95, 100, 125, 25);
buttonSumbit
.setBounds(50, 150, 75, 30);
buttonReset
.setBounds(150, 150, 75, 30);
labelmsg
.setBounds(50, 200, 100, 25);
panel
.add(labelname
);
panel
.add(labelpassword
);
panel
.add(textFieldname
);
panel
.add(passwordField
);
panel
.add(buttonSumbit
);
panel
.add(buttonReset
);
panel
.add(labelmsg
);
this.add(panel
);
this.setBounds(200, 100, 280, 300);
this.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
this.setVisible(true);
}
public static void main(String
[] args
) {
new Demo110();
}
}
系及专业选择,加事件处理(组合框)
import com
.sun
.org
.apache
.xalan
.internal
.xsltc
.compiler
.util
.StringStack
;
import javax
.swing
.*
;
import java
.awt
.event
.ActionEvent
;
import java
.awt
.event
.ActionListener
;
import java
.awt
.event
.ItemEvent
;
import java
.awt
.event
.ItemListener
;
import java
.util
.Stack
;
public class Demo111 extends JFrame {
private JPanel panel
;
private JLabel labelDepartment
, labelMajor
;
private JComboBox comboBoxDepartment
, comboBoxMajor
;
public Demo111() {
super("系别专业选择");
panel
= new JPanel();
labelDepartment
= new JLabel("系别");
labelMajor
= new JLabel("专业");
comboBoxDepartment
= new JComboBox(new String[]{"计算机系", "经济系", "管理系"});
comboBoxMajor
= new JComboBox();
comboBoxDepartment
.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e
) {
int i
= 0;
i
= comboBoxDepartment
.getSelectedIndex();
comboBoxMajor
.removeAllItems();
switch (i
) {
case 0: {
comboBoxMajor
.addItem("计算机科学与技术");
comboBoxMajor
.addItem("网络工程");
comboBoxMajor
.addItem("软件工程");
comboBoxMajor
.addItem("物联网工程");
break;
}
case 1: {
comboBoxMajor
.addItem("经济学");
comboBoxMajor
.addItem("国际贸易");
break;
}
case 2: {
comboBoxMajor
.addItem("会计学");
comboBoxMajor
.addItem("工商管理");
break;
}
}
}
});
panel
.add(labelDepartment
);
panel
.add(comboBoxDepartment
);
panel
.add(labelMajor
);
panel
.add(comboBoxMajor
);
this.add(panel
);
this.setBounds(200, 200, 500, 200);
this.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
this.setVisible(true);
}
public static void main(String
[] args
) {
new Demo111();
}
}