📄 java09.txt
字号:
} this.age = age; } public static void main(String[] args) throws AgeException{ Person p = new Person(); p.setAge(151); System.out.println(p.getAge()); }}输出结果:Exception in thread "main" com.tarena.day09.exception.AgeException: AgeError at com.tarena.day09.exception.Person.setAge(Person.java:12) at com.tarena.day09.exception.Person.main(Person.java:19)-----------------------------------------------------------------------------------------断言(Assert):需要用java -ea 包名.类名 来使用:Eclipse中在源代码框右键Run as,在Run中的Arguments下的VM Arguments中加入 -ea-----------------------------------------------------------------------------------------package com.tarena.day09.exception;public class TestAssert { public static void main(String[] args) { int i = 0; assert i == 1 : "err"; //java -ea 包名.类名 来使用 //如果不满足条件会抛出一个错误并中断程序 System.out.println("main"); }}输出结果:Exception in thread "main" java.lang.AssertionError: err at com.tarena.day09.exception.TestAssert.main(TestAssert.java:7)-----------------------------------------------------------------------------------------因为 try/catch 的效率不高,所以尽量用判断语句来避免RuntimeException1.算术异常 if(除数!=0)2.空指针 if(p!=null);3.数组 if<a[].length4.类型转换(obj.getClass())5.数字格式异常可以用正则避免-----------------------------------------------------------------------------------------package com.tarena.day09.exception;public class TestRE { public static void main(String[] args) { //算术异常 int b = 0; int a = 2; if(b!=0){ a = a/b; } //空指针异常 String s = null; if(s!=null) s.indexOf(3); //数组下标越界异常 String[] ss = new String[5]; int index = 5; if(index < ss.length){ ss[index] = ""; } //数字格式异常 String str = "24a"; if(str.matches("^[0-9]+$")) Integer.parseInt(str); //类型转换异常 Object o = new String(); if (o instanceof String) { str = (String)o; } }}-----------------------------------------------------------------------------------------图形用户界面(GUI):1.计算器2.记事本3.文件分割4.聊天软件5.多线程下载AWT与SwingAWT 不能100%跨平台,依赖OS,而且软件厂商都不愿意支持,功能很有限 但速度稍快,直接支持Applet(网页中的小插件),外观更贴近操作系统(OS)Swing 100%纯Java的,可以跨平台,轻量级组件,对资源消耗很小,开发功能更强,风格统一,更多厂商支持 缺点是不能直接支持Applet,需要装插件,比AWT要慢一点,稍占内存,某些平台美观度稍差创建GUI:1.选组件,选容器2.选布局3.加组件,入容器4.事件处理(完整按钮的功能)-----------------------------------------------------------------------------------------package com.tarena.day09.gui;import javax.swing.JFrame;import javax.swing.JButton;public class FirstFrame { public static void main(String[] args) { JFrame jf = new JFrame("First Frame"); JButton jb = new JButton("click"); jf.add(jb); //加入按钮 jf.setSize(300,200); //设置窗口大小 jf.setVisible(true); //设置窗口可见 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭,不设置关闭JVM没有退出 }}-----------------------------------------------------------------------------------------容器:JFrame就是通常意义上的窗口(必须有,后面两个可选)JDialog对话框,依赖于JFrameJPanel面板不能独立存在,必须放入一个JFrame或JDialog当中setLocation() 设置窗口出现位置setSize() 设置大小setBound() 设置边框一个容器只能有一个布局管理器,常用布局来自java.awt.* 包flowLayout: 保持组件的原始大小 像word一样,放入组件时是从左向右,从上到下排列的,水平方向允许靠左靠右或居中对齐(默认居中对齐)-----------------------------------------------------------------------------------------package com.tarena.day09.gui;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JTextField;public class TestFlow { public static void main(String[] args) { JFrame jf = new JFrame("TestFlow"); //创建窗口 JTextField jtf = new JTextField(20); //创建文本框显示20个文字 JButton[] jb = new JButton[10]; //创建按钮数组 jf.setLayout(new FlowLayout()); //改布局管理器 jf.add(jtf); //加入文本框 for (int i = 0; i < jb.length; i++) { //循环加入按钮 jb[i] = new JButton(""+i); jf.add(jb[i]); } jf.setSize(300,200); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}-----------------------------------------------------------------------------------------1.BorderLayout是JFrame和JDialog的默认布局管理器2.BorderLayout不保持组件原有大小,组件会填满区域3.把窗口分为东南西北中五部分,南北占整行,列固定 东西不占整列,行固定,默认中部,中部是不固定的-----------------------------------------------------------------------------------------package com.tarena.day09.gui;import java.awt.BorderLayout;import javax.swing.*;public class TestBorder { public static void main(String[] args) { JFrame jf = new JFrame("TestFlow"); String[] label = {"东","南","西","北","中"}; JButton[] jb = new JButton[label.length]; for (int i = 0; i < jb.length; i++) { jb[i] = new JButton(label[i]); } jf.add(jb[0],BorderLayout.EAST); jf.add(jb[1],BorderLayout.SOUTH); jf.add(jb[2],BorderLayout.WEST); jf.add(jb[3],BorderLayout.NORTH); jf.add(jb[4]); jf.setSize(300,200); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}-----------------------------------------------------------------------------------------GridLayout 1.不保持组件的原始大小 2.从左到右,从上到下,每个网格放一个组件,如果没放完,允许空-----------------------------------------------------------------------------------------package com.tarena.day09.gui;import java.awt.GridLayout;import java.awt.BorderLayout;import javax.swing.*;public class TestGrid { public static void main(String[] args) { JFrame jf = new JFrame("First Frame"); JTextField jtf = new JTextField(20); JPanel jp = new JPanel(); jp.setLayout(new GridLayout(2,5)); JButton[] jb = new JButton[10]; for (int i = 0; i < jb.length; i++) { jb[i] = new JButton(i+""); jp.add(jb[i]); } jf.add(jtf,BorderLayout.NORTH); jf.add(jp); jf.setSize(300,200); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}-----------------------------------------------------------------------------------------实现按钮监听1.写一个接口的子类 Actionlistener接口(java.set.event)的实现类,重写方法actionPerformed()2.为每个按钮加上 .addActionListener(子类对象)-----------------------------------------------------------------------------------------package com.tarena.day09.gui;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JTextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class TestFlow implements ActionListener{ JTextField jtf = new JTextField(20); public TestFlow(){ JFrame jf = new JFrame("TestFlow"); //创建窗口 JButton[] jb = new JButton[10]; //创建按钮数组 jf.setLayout(new FlowLayout()); //改布局管理器 jf.add(jtf); //加入文本框 for (int i = 0; i < jb.length; i++) { //循环加入按钮 jb[i] = new JButton(""+i); jb[i].addActionListener(this); jf.add(jb[i]); } jf.setSize(300,200); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { String comm = e.getActionCommand(); //取得按钮的label if ("0".equals(comm)) { System.out.println("0 is called"); } jtf.setText(comm); //设置文本窗的内容 } public static void main(String[] args) { new TestFlow(); }}-----------------------------------------------------------------------------------------作业:计算器:菜单不做,按钮做:Backspace-->退格(删除一个数字) 取文本框:String temp = jtf.getText();再调subString,最后setText CE/c-->清零(setText等于零) +/-正负号 顺序: backspace,CE,C,+ 7,8,9,- 4,5,6,* 1,2,3,/ 0,+/-,.,= 按数字-->按运算符-->再写第二个数字-->按等号算结果 基础不好的同学要求作出界面,基础好的尽可能实现功能
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -