java基础笔记

2023-11-02

前言

很久之前曾经学了一段时间java,今天偶然翻出了当时的笔记,想着留个纪念。
因为当时进行的是基础学习,并没有什么难点,所以这个笔记并不十分全面,也不够详尽(例如泛型、向量、数据流等等都没有,但这些东西想要初步掌握并不困难,所以本文也不再增加),但对一些初学者来说应该仍然有一定的价值。

一. java的一些基本规则

  1. java的常量使用final关键字修饰。
  2. java的逻辑判断有布尔值true和flase,与c与c++的0和1不同,不能与别的数据运算,例:9>3>2是不合法的,因为9>3的值是true,则原式变为true>2,无法比较。但9>3+2是合法的,最后结果为true,因为关系运算符的优先级比算术运算符低。
  3. For-each循环:for(int k:a) { 。。。};//a是数组名;主要作用是遍历数组,并且不能修改内容,有时非常方便
  4. Java可以在类中定义变量时赋值,不赋值的话会有默认值,整形的默认值是0
  5. Java定义类中数据成员与方法的时候,默认为default类型(同一包内自由访问)
  6. 一个编译单元(一个java源文件)只能有一个public类型的类,且类名必须和文件名相同。
  7. Break可以带标号,指定作用域

二.java的面向对象基础

  1. Java有包裹类型,其中基本数据类型的:
    byte—Byte
    short—Short
    long—Long
    int—Integer
    float—Float
    double—Double
    char—Character
    boolean—Boolean

  2. Java的字符串类型的对象本质是一块内存空间的管理者,若有a和b两个字符串类型对象,a=b意味着a和b指向同一块空间,管理同一块内存,自然值也是一样的。

  3. 字符串类型的比较比较的是是否指向同一块空间,所以a==“abc”这样的判断是不对的,如果要比较内容是否相同,可以使用equals,例:a.equals(“abc”),或a.equals(b);

  4. 字符串的几种操作:
    比较内容大小:a.compareTo(b)
    获得长度:a.length()
    访问:a.charAt(1)//a=“abc”,则输出b。但是这个操作不能和for-each循环一起使用。

  5. 容器
    ArrayList容器允许相同的值(因为List是列表),导入为import java.util.ArrayList;
    HashSet容器不允许有相同的值(因为set是集合)。
    HashMap: HashMap<Integer,String>xxx=new……….();(integer是包裹类型),integer是key,string是值。Key和值不一定是integer和string类型。Key是惟一的,如果两个值的key相同,那么后一个值会覆盖前一个。

  6. 继承
    修饰符为extends(扩展)。
    Protected: 自身和子类以及同一个包中的其他类可以使用。
    Super(xxx): 直接调用父类构造函数
    Super.xxx(): 调用父类方法
    Suoer.xxx: 从子类中获取父类的xxx数据值。

  7. 其他
    Java不能做对象之间的赋值,只能做管理权的变动
    子类对象可以给父类对象赋值,反之不可。除非用一个被子类对象赋值的父类变量(此时这个变量类型是父类,但是其中实际管理的是子类对象)给子类对象赋值。
    例: 子类 xxx=(子类) 父类对象(父类须被子类赋值过)。
    即上转型对象。

三.抽象、接口、异常基础

  1. 抽象类中没有定义只有声明,因为抽象只是表达一种概念而不去具体实现它,且抽象类无法有具体的对象
  2. Java的抽象关键字是abstact,例:public abstact class A{。。。}
  3. 在java中,显而易见,如果一个子类继承自一个抽象类,那么必须把抽象类中的所有抽象函数全部覆盖,否则他自己也会变成抽象类,从而导致无法创建对象。
  4. 接口是纯抽象类,即:1.所有的成员函数全部是抽象函数;2.所有的成员变量全部是public static final(公有静态常量)类型。
    一. 对于一维数组,使用length是获得元素个数;对于二维数组,使用length是获得一维数组的个数。
    二. 使用final修饰的方法不可以被重写,使用fianl修饰的类不可以被继承,因为内存空间不能变更,例:final class xxx{。。。};
接口
  1. 声明关键字:interface。接口中不能有变量,只有常量;而方法只有声明,没有实现,是抽象的,例:
    interface X{ final int a=1; int xxx();};
  2. 其中,方法默认为public abstract的
  3. 接口可以互相继承,使用extends;接口也可以多继承。
  4. 类可以实现接口,关键字为implements,类一旦实现接口,必须实现他们的所有方法,并用public修饰。
  5. 接口定义的常量被所有实现它的类所共享。
  6. 接口本质就是为了弥补java只能单继承这个“缺陷”
匿名类
  1. 子类对象的创建和类体定义同时进行的类,称为匿名类
  2. 匿名类不能声明对象,但是可以创建对象。例:New A{。。。};就是一个匿名类,其中A是一个具体的类,也是匿名类的父类
  3. 匿名类必须是内部类,可以重写(因为是子类)。
  4. 作用:例:有一个方法为f(A a),参数是一个A的对象,则可以f(New A{。。。});
    另外:接口回调和上转对象和匿名传参等等,其实就是多态的体现,方法大同小异,都是用用子类对象赋值给父类对象,达到重写的目的。
异常
  1. java中的异常属于一种类
  2. Throwable是所有异常类的父类,只有他和他的子类的对象才能被异常机制处理,所以自己写异常必须要继承它或它的子类。
  3. 结构有两种:try-catch-finally和throws
  4. 第一种:try{。。。}catch(异常类名 对象名){。。。}catch(同上){。。。}finally{。。。}
  5. Finally可以没有,有的话必须在所有catch块后面,且不论有无异常都会执行。
  6. 第二种结构是throws-throw。Throws加在方法声明后,throw则是和c++一样,抛出异常。

四.java的gui基础

一、 图形界面
三要素:放置组件的容器(窗体、对话框、中间容器);在容器中的控件(按钮、文本框、菜单等);事件监听机制(监听器和事件处理)。
二、 主要包
  1. java.awt(布局类)(重组件)
  2. java.awt.event(事件监听)
  3. javax.swing(窗体组件)(轻组件)
  4. java.awt和javax.swing都有控件,但是java.awt消耗的资源多而且兼容性差。
三、 窗体类
  1. JFrame(重)
  2. 当需要一个窗体时,可以使用它或者它的子类来创建一个对象(即窗体)。用它创建的窗体默认添加到显示器上,所以不能把此窗体加到其他的容器中。
  3. 创建时的参数为字符串,也就是标题,也可以不写。
方法
  1. setLocation(int,int)-窗口左上角位置;
  2. setSize(int,int)-窗口高和宽;
  3. setBounds(int,int,int,int)-1和2的综合体;4.setVisible(boolean )-true窗体可见,默认false;
  4. setResizonble(boolean )-设置是否可调整窗体大小,默认不能。
  5. setDefaultCloseOpreation(int xxx)-单机“X”号后发生的事。(xxx是int类型静态常量可以用类名直接调用,例如EXIT_ON_CLOSE),
    例:setDefaultCloseOpreation(JFrame.EXIT_ON_CLOSE)-单击后结束整个程序
四、 布局管理器
  1. 更改布局需要使用setLayout()方法。
  2. FlowLayout类(流线型布局)、BordLayout(默认布局,东西南北中)、GridLayout(规则的网格状布局)、盒式布局
  3. FlowLayout按照添加的先后顺序左到右依次排列,组件大小不随窗口位置大小的改变而改变,但是位置改变。
  4. FlowLayout参数:(对齐方式,横向间隔,纵向间隔),对齐方式有:LEFT(左对齐)、RIGHT(右对齐)、CENTER(居中对齐)–需要用类名调用,静态常量。
方法
setHgap(int )-设置横向间隔
setVgap(int )-设置纵向间隔
setAlignment(int )-设置对齐方式
BordLayout类
  1. 中间区域最大。添加组件方式:add(组件,位置)
  2. 位置还是静态常量,需要类名调用:NORTH(北)、SOUTH(南)、EAST(东)、WEST(西)、CENTER(中)。
  3. 同一位置的组件具有覆盖效果。
GridLayout类
  1. 构造:GridLayout(int,int,int,int)-x行x列,每一行列x高x宽。
盒式布局
  1. 用Box类,例:Box box1;其中存放的是容器,有两种容器布局:
    box1=Box.creatHorizontalBox();-行型盒式布局,有水平支撑方法(上沿对齐)。
    box1=Box.creatVerticalBox();–列型盒式布局,有垂直支撑(左沿对齐)
  2. 水平支撑方法:creatHorizontalStrut(宽度);
  3. 垂直支撑方法:creatVerticalStrut(高度);
  4. 中间容器
    JPanel类,默认布局是FlowLayout
    JScrollPane,创造滚动条
    JSplitPane—拆分窗格。
五、 文本框
  1. JtextField文本框;JpasswordField密码框;JtextArea(文本区,可写入多行字符)
  2. JTextField(int x)-可输入x个字符。
  3. Jtextfield(string s)-初始内容为s串
  4. SetText()、getText()
  5. SetEditable(boolean)–设置可编辑性,默认可。
  6. SetEchoChar(char c)–密码框,设置回显字符,默认“*”
  7. JTextArea(int,int)–可容纳x行y列。
六、 事件机制
  1. 事件源、监听器、处理接口
  2. 事件源调用方法为自己添加监听器,例:addActionListener();
    处理方法:public void actionPerformed(ActionListener a)
  3. 事件机制是使用的接口,实现了某个抽象方法。
七、 标签与按钮组件
  1. JButton(string)、JButton(Icon icon)-icon是图标,这个没用过。JButton(string,ICON)–以上综合版。
  2. 方法:setText()、getText()、getIcon()、setIcon()。
  3. 方法:setMnemonic(char m)–设置键盘激活,m是‘a’~‘z’,使用alt+m就能激活。
  4. 标签:JLabel(string)、JLabel(Icon)–默认左对齐。
八、 复选与单选框
  1. 复选框JcheckBox类用来进行多选择,单选JRadioButton就单选,显而易见的。
  2. JcheckBox(string,Icon),同样可以拆分。
  3. 方法:boolean isSelected()–返回他是否被选中。
  4. 监听器:addItemListener(ItemListener listener)
  5. 处理事件方法:public void itemStateChange(ItemEvent ie)
  6. 单选按钮可以被划归为某一组,某一组内同一时刻只能有一个被选中。
  7. 归组:ButtonGrop类,设bg为此类对象,则bg.button(单选按钮名)。

五.java的线程基础

一、 线程基础
  1. 进程是一次动态执行过程,同一段程序可以作为执行蓝本被多次加载到不同内存区域运行,从而形成不同进程。
  2. 线程是比进程更小的单位,可以是进程的一部分,一个进程可以有多个线程,形成多个执行流。
  3. 线程类为Thread类
  4. 线程生命周期:产生、存在(中断,休眠)、消亡。
  5. 可以通过继承Thread类或实现Runnable来创建线程对象。
  6. 创建线程对象后,必须调用start()方法来获取使用cpu资源的排队机会。
  7. 消亡:任务完成或者被强制终止。
  8. Run()方法里是线程的操作。
二、 线程中断
  1. JVM将cou使用权切换给了其他线程。
  2. 执行了sleep()方法,进入了休眠状态。
  3. 执行了wait()方法,是用notify()或notifyAll()结束。
  4. 执行了阻塞操作(比如需要通过键盘输入数据)
三、 创建线程
  1. Thread构造方法:Thread()或Thread(Runnable b);b是一个接口对象,所以b必须是一个实现了此接口的对象。
  2. 通过继承Thread类,重写public void run()方法来创建。
  3. 通过实现Runnable接口的run()方法创建。
四、 线程的常用方法
  1. sleep(毫秒)
  2. isAlive(boolean ),被final修饰,不能重写,返回boolean值,判断线程是否处于运行状态。
  3. interrupt()结束休眠
  4. currentThread()返回一个Thread对象,即正在使用cpu资源的线程对象;使用类名直接调用。
  5. setName()和getNName()
五、 线程同步
  1. 当多个线程要处理同一组数据时,可能会出错。
  2. 关键字:ssynchrized
  3. 使用关键字修饰某方法后,某线程调用此方法时,就必须执行完此方法内的所有任务。例:public synchrized void xxx(){。。。}
  4. 如果某线程的同步方法需要一个变量,但是此变量需要另一个线程来修改后才能用,那么可以在同步方法中使用wait()方法来让出cpu的使用权。等另一个线程完毕后,可以使用notify()或者notifyAll()来结束等待状态,进入排队状态。
六、 线程联合
  1. 一个线程运行时,可以通过join()方法来联合
  2. 比如Thread1在运行,这时,thread2.join();则称thread1在运行期间联合了thread2
  3. 若thread1联合了thread2,则thread1中断,thread2获得使用权,并且在thread2任务全部完成后(消亡),thread1才结束中断状态。进入排队状态。
  4. 若thread2已经消亡,则thread2.join()不起任何作用。
    七、 守护线程
  5. 使用setDaemon(boolean )方法将自己设置为守护线程或者不是守护线程。
  6. 当守护线程内的所有普通线程都结束后,守护线程的run()里即使还有没执行的语句,也会被强制结束。例:java的垃圾回收机制。
  7. 用法:创建多个线程,然后设置一个为守护线程,其他的自动成为被守护线程。
  8. 注意:必须在这个线程的start()方法前设置为守护线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础笔记 的相关文章

  • Mongo 可审核的 ZonedDateTime 字段在 Spring Boot 2 中不起作用

    在 Spring Boot 项目中 我使用 CreatedDate 之类的注释来保存有关创建 更新相应文档的日期的信息 整个项目都使用 ZonedDateTime 因此带注释的字段也是 ZonedDateTime 为了实现 Mongo 的日
  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高
  • jvm中本机代码如何转换为机器代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过一些文章说 jvm将字节码转换为机器码 jvm将字节码转换为本机代码 jvm 将字节码转换为系统调用 系统调用又由操作系统与硬件
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • 在java中将DataURL图像转换为图像文件

    我在我的 java servlet 中接收图像 DataURL 它看起来像 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAA 我需要将其另存为图像文件 我该怎么做 The simplest w
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • 如何使用 Selenium 中的索引切换到窗口

    由于selenium不提供切换到窗口 多个窗口 的方法 但我想使用index html自定义方法来切换到不同的窗口 但下面的代码没有按预期工作 请建议以下方法的最佳实施 public void switchToWindowIndex int
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • 在 REST Web 服务中接受逗号分隔值

    我正在尝试接收 REST URI 中以逗号分隔值形式的字符串列表 示例 http localhost 8080 com vogella jersey first rest todo test 1 abc test 其中 abc 和 test
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 【Unity故障】Unityhub登录界面白屏(刷新不出那种感觉)

    平时打开UnityHub可能也就是偶尔需重新激活一下许可证 今天进去发现每个工程后都一个黄色感叹号标志 看了下账号也没登状态 当我以为登个账号就解决 然后就一直卡在这个界面 好像在哪看见过这个问题直接百度搜 资料很多 前人已经帮我们铺平了道
  • java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.

    springboot 配置多数据源时 启动出现java lang IllegalArgumentException jdbcUrl is required with driverClassName 修改 spring datasource
  • HIVE解析JSON数组

    HIVE解析JSON数组 数据示例 payAmount 375000 payChannelCode BOC payAmount 376000 payChannelCode AOC 1 get json object函数提取json数组里面特
  • 快速排序算法讲解及代码(详细)

    快速排序算法 一 序言 二 快速排序基本思想 三 具体步骤 四 具体代码 一 序言 快速排序是一种高效且使用广泛的排序算法 在很多语言的标准库中自带的排序都是快速排序 所以我们也有必要了解快排的原理以及实现方法 二 快速排序基本思想 算法思
  • C51单片机学习1

    工程的建立与烧录 一 工程的建立 1 在想要建立工程的地点新建一个文件夹 2 打开C51 选择新建项目 3 点击保存 4 选择芯片AT89C52 选好点击OK 5 破解版的一个bug 点击否就好了 6 然后工程就建立好了 二 工程的配置 1
  • FPGA引脚简介

    一 FPGA的硬件结构 这里说的硬件结构主要从FPGA的引脚功能方面描述 FPGA内部的电路逻辑暂不讨论 FPGA的引脚大致可以分为三类 功能引脚 IO引脚 电源和接地引脚 1 功能引脚 FPGA的功能引脚包含了FPGA配置程序加载 FPG
  • 如何自定义FileZilla编辑文件的默认打开方式

    需求来源于 用FileZilla编辑远程的文件时 每次打开居然不会提示我 打开方式 而是直接跳到了网页 以网页的形式展现 这样我怎么好进行编辑其中的内容 特别是对于xml文件 我们通常需要对它进行配置 可是 如果打开方式是网页 比如 直接跳
  • vue项目引入element-ui的三种方式

    1 element ui插件引用 推荐 通过执行命令vue add element来进行引入 2 npm install 此种方式为全量引入element ui 打包体积大 通过执行命令npm i element ui S安装依赖 main
  • linux超级用户添加,为linux普通用户添加超级用户权限sudo

    问题 假设用户名为 ali 如果用户名没有超级用户权限 当输入 sudo 命令 时 系统提示 ali is not in the sudoers file This incident will be reported 解决 1 进入超级用户
  • unity editer2020版本安装

    unity editer2020版本安装 前言 unity安装 激活许可证 前言 官方下载unity最新版本 unity安装 1 点击下载 2 点击 下载Unity Hub 3 由于我是windows10系统 所以点击 Windows 下载
  • vue表格展示照片点击放大并可左右切换查看

    一 vue展示后台返回照片集合 前端代码展示
  • 基于机器学习的恶意软件加密流量检测研究分享

    1 概述 2 恶意软件加密流量介绍 3 加密HTTPS流量解析 4 特征工程 5 模型效果 6 具体实施 7 总结 1 概述 近年来随着HTTPS的全面普及 为了确保通信安全和隐私 越来越多的网络流量开始采用HTTPS加密 截止今日 超过6
  • 深度学习模型推理时间与FPS的求取方法,以及time,OpenCV的API教程

    类似深度学习中目标检测的深度学习模型中有两个非常重要的性能指标 一个是MAP就是检测的准确率 另一个就是FPS 就是模型的推理速度 那么我们如何能够知道模型和视频的推理速度呢 接下来我们直接进入正题 一 求取模型的推理时间我们需要借助pyt
  • C语言支不支持重载?

    首先这个问题的答案是C 支持函数重载而C语言不支持函数重载 下面我们从程序编译链接阶段看看其中的原因 先看看重载的定义 函数重载就是指 在同一作用域类 一组函数的函数名相同 参数列表不同 个数不同或类型不同 返回值可同可不同 那么问题来了
  • 风火速打印小程序分析

    这里写自定义目录标题 软件需求背景 分析风火速功能 功能介绍 总结 软件需求背景 类似淘宝 京东第三方卖家需要一个OMS系统 并提供辅助的快递订单打印功能 现在菜鸟物流已标准化了各家快递公司的电子面单 也可以独立对接快递公司 商家需求提供一
  • 高性能Spark作业调优

    在大数据计算领域 Spark已经成为了越来越流行 越来越受欢迎的计算平台之一 Spark的功能涵盖了大数据领域的离线批处理 SQL类处理 流式 实时计算 机器学习 图计算等各种不同类型的计算操作 应用范围与前景非常广泛 在美团点评 已经有很
  • [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始 作者主要写了三个Python系列文章 分别是基础知识 网络爬虫和数据分析 Python基础知识系列 Pythonj基础知识学习与提升 Python网络爬虫系列 Python爬虫之Selenium Phantomjs Cas
  • Thinkphp 如何自动验证及验证规则

    在添加数据或者创建数据的时候 我们一般对数据进行处理 ThinkPHP模型层提供的一种数据验证方法 可以在使用create创建数据对象的时候自动进行数据验证 1 自动验证的用法 namespace Home Model use Think
  • 利用FPGA的DDS直接数字合成产生SPWM正弦调制方波

    1 原理 利用FPGA的DDS产生调制信号 利用计数器产生高频载波三角波 将两路信号通过比较器进行比较 产生调制SPWM方波 1 1 DDS基本结构 三个寄存器 两个加法器 第二个加法器可以输出地址作为ROM数据表模块的输入 从而提取ROM
  • java基础笔记

    java基础自学笔记 前言 一 java的一些基本规则 二 java的面向对象基础 三 抽象 接口 异常基础 接口 匿名类 异常 四 java的gui基础 一 图形界面 二 主要包 三 窗体类 方法 四 布局管理器 方法 BordLayou