首页 > 编程语言 >Head First Java 读书笔记

Head First Java 读书笔记

时间:2022-11-10 23:15:32浏览次数:48  
标签:Head Java 读书笔记 void class frame new 异常 public

第11章:异常处理

如果你把有风险的程序代码包含在 try/catch 块中,那么编译器会放心很多。 try/catch 块会告诉编译器你确实知道所调用的方法会有风险,并且也已经准备好要处理它。

try {
// 有风险的行为
Sequencer seq = MidiSystem.getSequencer();
System.out.println("had got a sequencer");
} catch (MidiUnavailableException ex) {
System.out.println(ex);
} finally {
System.out.println("总会被执行!");
}

异常也是多态的,Exception子类的实例对象,都是 Exception类型的。编译器会忽略 RuntimeException类型的异常,RuntimeException类型的异常不需要声明或被包含在 try/catch 块中。

如果 try 或 catch 块中有 return 指令,finally还是会执行。流程会跳到 finally执行,finally执行完毕后再回跳到return 指令。

如何处理多重异常?

class Laundry {
public void doLaundry() throws PantsException, LingerieException {}
}

public class HandleException {
public void go() {
Laundry lau = new Laundry();
try {
lau.doLaundry();
} catch (PantsException e) {
System.out.print(e);
} catch (LingerieException e) {
System.out.print(e);
} finally {
}
}
}

如果有必要的话,方法可以抛出多个异常。但该方法的声明必须要有含有全部可能的检查异常(如果两个或两个以上的异常有共同的父类时,可以只声明该父类就行)。

有多重异常需要捕获时,异常要根据继承关系从小到大排列,如果更高一级的异常排在了前面,将会导致低一级的异常将没有机会被使用。同级别的异常,排列顺序无所谓。

异常从哪里来?

异常是由方法 throws 来的。

public void doLaundry() throws PantsException, LingerieException {}

如果你调用了一个有风险的方法,但你又不想 try/catch捕获时怎么办?你可以继续使用 throws 关键字,把异常抛给下一个调用我的人,这好比是在踢皮球哈哈。

从上面看,程序有两种方式来处理异常,一种是使用 try/catch 来捕获异常,另一种是使用 throws 把异常抛给下一个调用者。

 

第12章:图形用户接口

什么是 JFrame ?

JFrame 是个代表屏幕上的window对象。你可以把 button / text / checkbox 等 widget 接口放在 window上面。

如何编写第一个 GUI 程序?

public class TestGui implements ActionListener {
JButton btn;
void init() {
// 创建 frame
JFrame frame = new JFrame();
// 当window关闭时,把程序结束掉
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建 widget
btn = new JButton("click me");
// 给btn 注册事件
btn.addActionListener(this);
// 把 btn添加到 frame上
frame.getContentPane().add(btn);
// 显示
frame.setSize(300, 300);
frame.setVisible(true);
}
// 覆写 ActionListener接口的中的方法
@Override
public void actionPerformed(ActionEvent event) {
btn.setText("I've been clicked.");
}
public static void main(String[] args) {
TestGui tg = new TestGui();
tg.init();
}
}

图形界面中,事件三要素:事件源、监听、事件对象。其中,事件对象携带着事件的详细信息。

1.在 frame上放置 widget。javax.swing这个包中有很多 widget组件可以用。

2.在 frame上绘制 2D图形。使用 graphics 对象来绘制 2D 图形。

3.在 widget上绘制 jpeg图片。 graphics.drawImage(img, 10, 10, this);

如何自定义 widget 组件?

继承 JPanel ,并覆写 paintComponent()这个方法。

public class CustomComponent extends JPanel {
// 覆写方法
public void paintComponent(Graphics g) {
// 绘制矩形
g.setColor(Color.orange);
g.fillRect(20, 50, 100, 100);

// 绘制图像
Image img = new ImageIcon("./car.png").getImage();
System.out.println(img);
g.drawImage(img, 3, 4, this);

// 绘制矩形
g.fillRect(0, 0, this.getWidth(), this.getHeight());
int red = (int)(Math.random()*255);
int blue = (int)(Math.random()*255);
int green = (int)(Math.random()*255);
// 创建随机色
Color color = new Color(red, green, blue);
g.setColor(color);
// 绘制覆盖物
g.fillOval(70, 70, 100, 100);
}
}

// 使用自定义的组件:
public class TestGui {
void init() {
JFrame frame = new JFrame(); // 创建 frame
CustomComponent cc = new CustomComponent();
frame.getContentPane().add(cc);
frame.setSize(300, 300);
frame.setVisible(true);
}
}

什么是内部类?如何创建内部类的实例?

一个类可以嵌套在另一个类的内部,这便构成了内部类。内部类可以访问外部类中的所有成员,包括外部类的成员变量和成员方法,即使它们是私有的。

public class OuterClass {
private int x;

InnerClass ic = new InnerClass(); // 创建内部类实例
public void foo() {
System.out.println("outer class -> 1: " + x);
ic.go();
System.out.println("outer class -> 3: " + x);
}
// 内部类
class InnerClass {
void go() {
x = 42; // 访问外部类的成员变量 x
System.out.println("inner class -> 2 : "+x);
}
}

public static void main(String[] args) {
OuterClass oc = new OuterClass();
oc.foo();
// 另一种 创建内部类实例的方式
OuterClass.InnerClass ocic = oc.new InnerClass();
ocic.go();
}
}

标签:Head,Java,读书笔记,void,class,frame,new,异常,public
From: https://www.cnblogs.com/LvJinshuai/p/16879132.html

相关文章

  • Java的用法
    Java支持以下三种注释方式:1、单行注释以双斜杠“//”标识,只能注释一行内容,用在注释信息内容少的地方。打开Eclipse,在Java代码中使用单行注释,如图所示。2、多行注释包......
  • JAVA线程池管理及分布式HADOOP调度框架搭建
    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头。怎么做......
  • 定义一个Java类,用来描述订单,属性自定义
    示例代码packagecom.powernode.oo;publicclassOrder{/***名称*/privateStringname;/***订单标识*/privateStrin......
  • Java学习——11.10
    今天得时间都花在数学和英语上了,Java的话就只看了一点对象和内存的关系,但我觉得够了。这章虽然狂神讲的很浅,又因我没怎么学过数据结构,于是我又从CSDN上看了点。下面来......
  • java——循环控制语句——for——while——do……while——整理03
                                                        ......
  • Java反射和代码
    反射什么是反射Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到类对象之后,再通过类对象进行反编译,从而获取......
  • java——循环控制语句——for——while——do……while——整理02
                                                        ......
  • java 自定义注解
    packagecom.tedu.in;importjava.lang.reflect.Field;publicclassTest{publicstaticvoidmain(String[]args){Class<User>user=User.class;......
  • Java小试牛刀第一期:如何用idea创建项目
     首先,用IDEA创建一个Java项目,项目名字就叫做j2se,为了方便后面学习SpringBoot,JDK我们默认使用1.8。 IDEA不需要用最新的,用 2017.2 的就很好,经本人测试,这个版本相对来说......
  • 好玩的接口 之 Java 解密微信小程序获取手机号
    LZ-Says:有些东西,真的是很矛盾,本来很简单的事儿,各自坚持,结果,不欢而散,不舍?如何?前言最近搞接口,基于SpringBoot,怎么说呢,很虐。不过熟悉了业务,表结构等等,相对来说还是比较n......