Java开发技术 - 期末复习

Java开发技术复习

Java语言基础 1-2

  • 标识符以字母、下划线(_)或者**美元符号(\()**开头,字母、数字、下划线(_)以及美元符号(\))组成

  • 长整型是long(64位)、char是16位、boolean是1位

  • 整型常量的后缀字母:l(L),表示long型, 64bits

  • 实型常量的后缀字母:f(F), d(D)

  • 字符串连接运算时,如果一个操作数为字符串,一个操作数为数值型,则会自动将数值型转换为字符串 (塑型)

  • String substring(int k) 从位置k处提取子串到串结束

    String substring(int start, int end)从位置start到end提取子串

    int compareTo(String t) 本串<串t, 返回负数;本串>串t, 返回正数;本串=串t, 返回0

    char charAt(int k) 返回String串第k个字符(k从0开始)

  • int - Integer, char - Character

  • valueOf() 静态方法,用于返回给定参数的原生 Number 对象值,参数可以是基本数据类型, String等。

  • Scanner类实现数据输入

    image-20231224222156195
  • System.out.print(字符串) 输出串不换行

    System.out.println(字符串) 输出串并换行, println的ln是line的意思

    System.out.printf(格式串,表达式列表)

    image-20231224222639445
  • Java数组作函数参数时为引用型参数传递;其它参数传递情况都是传值。

  • int[] a 和int a[] 都是合法的,可以作为声明数组或函数的形参。

面向对象编程 1-3

  • Java会给成员变量一个初始值;Java不会给局部变量赋予初始值,如果在类声明中没有给实例变量赋初值,则对象的属性值为零或空

  • Java不支持默认的参数值

  • 类的访问控制只有public(公共类)及无修饰符(缺省类)两种

    类型 无修饰 public
    同一包中的类 yes yes
    不同包中的类 no yes
    类型 private 无修饰 protected public
    同一类 yes yes yes yes
    同一包中的 子类 no yes yes yes
    同一包中的 非子类 no yes yes yes
    不同包中的 子类 no no yes yes
    不同包中的 非子类 no no no yes
  • 如果在一个类中不存在无参的构造方法,则要求其子类声明时必须声明构造方法,否则在子类对象的初始化时会出错

  • [public] [abstract|final] class 类名[extends 父类名] | [implements 接口名]

  • 只支持类的单继承,每个子类只能有一个直接父类

  • 在 Java 中,如果子类的构造函数中没有显式调用 super(...) 或者调用另一个构造函数(使用 this(...)),那么会隐式调用父类的默认(无参)构造函数(如果父类有默认构造函数)

  • super()this() 必须作为构造函数的第一条语句,这是由于对象的初始化顺序,确保在子类构造过程中首先完成父类的初始化或本类其他构造方法的调用。

  • this() 关键字用于在构造函数中调用同一类的其他构造函数(重载)

  • 抽象方法定义:abstract double getArea();

  • 继承改写已有的属性和方法方法:隐藏,super.value访问父类被隐藏的的变量和方法

  • 父类不能直接访问子类的变量和方法,因为继承是单向的。但是父类并不知道它的子类的存在。当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量。

  • static静态方法是与类本身相关联的,而不是与类的实例相关联的。因此,它们不涉及多态性和动态绑定,所以不能被覆盖。

  • final 修饰的变量表示该变量的值不能被修改。

  • 类本身并不能被声明为 static,可以创建静态内部类。

  • 接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字; 接口中的字段默认是 publicstaticfinal 的; 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。

  • abstractstatic 两个修饰符是互斥的

  • 接口可通过扩展extends的技术派生出新的接口

  • 塑型(类型转换):当一个类对象被塑型为其父类后,它提供的方法会减少

  • 多态:所有的对象都可被塑型为相同的类型,响应相同的消息。

    • 向上塑型技术:一个父类的引用变量可以指向不同的子类对象
    • 动态绑定技术:运行时根据父类引用变量所指对
    • 象的实际类型执行相应的子类方法,从而实现多态性

异常

  • try-catch-finally(无论是否发生异常,代码总执行)throws-声明异常 throw-抛出异常

  • 用户自定义处理信息:System.err.println("出现错误”)

  • 调用方法输出异常信息:e.printStackTrace();

  • 异 常 类 型 说 明
    Exception 异常层次结构的父类
    ArithmeticException 算术错误情形,如以零作除数
    ArrayIndexOutOfBoundsException 数组下标越界
    NullPointerException 尝试访问 null 对象成员
    ClassNotFoundException 不能加载所需的类
    IllegalArgumentException 方法接收到非法参数
    ClassCastException 对象强制类型转换出错
    NumberFormatException 数字格式转换异常,如把"abc"转换成数字
  • try块或catch块有return,返回前也会执行finally块,唯一不执行finally块是System.exit()退出

  • 多catch:只执行第一个与异常类型匹配的catch语句

  • 使用 throws 关键字对外声明该方法有可能发生异常,如果没处理会报错“未处理异常类型异常”。void myMethod() throws SomeException { /*方法体*/ }

  • 手动抛出异常 throw new Exception(“说明");

  • 使用log4j记录日志

字符串

  • 字符串是常量final类,值不可改。replace等函数将引用s指向了一个新的String对象
  • String的长度是不可变,StringBuffer长度可变,所以当进行大量的字符串连接操作时用StringBuffer
  • public String(charl] value, int offset, int count) , value - 作为字符源的数组 offset -初始偏移量 count - 长度

image-20231225120535157

  • 使用 == 运算符比较两个 String 对象时,它会比较两个对象的引用是否指向相同的内存地址,而不是比较字符串的内容。要用str1.equals(str2)

  • equalsIgnoreCase(),toLowerCase(), toUpperCase( )

  • index0f(String str, int fromIndex), lastIndex0f(String str, int fromindex) , 注意lastIndex0f是反向搜索

  • substring(int index)提取从位置索引开始的字符串部分, ing substring(int beginindex, int endindex)

  • trim()方法,用于去除字符串两端的空白字符(空格、制表符、换行符等),返回一个新的字符串

  • split(string s)方法,将一个字符串分割为子字符串,结果作为字符串数组返回

  • StringBuffer的使用:sb.append("c"); 追加字符串sb.insert(index, "c"); //插入字符串

  • String类提供了大量的操作字符串的方法

    • 获得字符串的长度:length()
    • 比较字符串:equals()
    • 连接字符串:concat()
    • 提取字符串:substring()
    • 搜索字符串:indexOf()
    • 拆分字符串:split()
  • 常用的StringBuffer类提供的方法

    • 转换成String类型:toString()

    • 连接字符串:append()

    • 插入字符串:insert()

Applet

  • init()方法是Applet首先执行的方法

  • 小应用程序都继承自java.applet.Applet类,必须是public类

  • 生命周期

    1.打开浏览器时,创建(init)方法运行;整个生命周期只被执行一次

    2.显示Applet时,启动(start)方法运行;运行或从其它页面返回时调用

    • public void paint(Graphics g) 输出文本,绘制图像,输出图像,声音等,start() 后被执行

    3.不显示Applet时,停止(stop)方法运行;离开Applet所在页面时

    4.关闭浏览器时,撤销(destroy)方法运行;关闭浏览器,运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法

  • 任何与绘图有关的操作第一个要用的是java.awt.Graphics类,Graphics类的对象不是由new产生的,而是由系统或其他方式直接将生成好的

  • 坐标原点在左上角,X轴向右,Y轴向下

  • public abstract void drawString(String) str, int x, int y)

    使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。

  • public abstract void fillRect(int x, int y, int width, int height)

    填充指定的矩形。该矩形左边缘和右边缘分别位于 x 和 x + width - 1。上边缘和下边缘分别位于 y 和 y + height - 1。得到的矩形覆盖 width 像素宽乘以 height 像素高的区域

  • Color c = new Color(0,255,0) //Color(int r,int g,int b); Color(int rgb);

    g.setColor(c); g.setColor(Color.red);

  • 0-正常-PLAIN; 1-粗体-BOLD;2-斜体-ITALIC

  • g.setFont(new Font("隶书", Font.BOLD, 28));

  • Graphics拥有的绘图方法

    drawLine(int,int,int,int) 画直线。起点坐标,终点坐标

    drawRect(int,int,int,int) 画矩形。左角坐标,宽,高

    fillRect(int,int,int,int) 用前景颜色填充矩形。

    drawRoundRect(int,int,int,int,int,int) 画圆角矩形。左角坐标,X宽,Y高,深度X,深度Y

    draw3DRect(int,int,int,int,boolean) 画3D矩形。左角坐标,宽X,高Y,true

    drawOval(int,int,int,int) 画椭圆。中心坐标,长轴,短轴

    drawArc(int,int,int,int,int,int) 画弧。左角坐标,宽,高,起始角,终止角

    drawPolyline(int[],int[],int) 画折线。各点的X坐标,Y坐标,折线数

    drawPolygon(int[],int[],int) 画多角形。各点的X坐标,Y坐标,边数

    drawPolygon(Polygon) 画多角形。定义好的多角形对象

  • 返回Applet类文件所在网页的网络路径: public URL getDocumentBase()

  • 载入图片: public Image getImage(URL url, String name) name可以为路径下的图片

    testImage = getImage(getDocumentBase(),"flag.gif");

    g.drawImage(testImage,0,0,this);

  • 载入声音:

    public AudioClip getAudioClip(URL url, String name)

    getAudioClip(getDocumentBase(),"tiger.au").play();

  • Applet被设计为从远程站点下载然后在本地执行,游览器中启用了Java,那么浏览器就会自动下载网页中的Applet代码并执行。

  • Applet的限制执行环境常常称作sandbox不能读写本地计算机的文件,不能运行任何本地可执行程序;除与下载处它的服务器Applet不能同的其他任何主机通信;只能获取Java版本操作系统的名字和版本、用来分离文件、路径以及行的字符,不能获取任何其它关于本地计算机的信息。

GUI 1-2

了解AWT和Swing

  • AWT(Abstract Window Toolkit)是在Swing出现之前用来设计界面的工具包

    用awt包中的类创建的用户界面在不同的操作平台上有不同的表现。使用不灵活

    import java.awt.*;

  • Swing是对AWT的扩展,它是Java 2中的一个标准包

    组件都以J开头,例如:JFrame、JButton等。swing界面在不同的平台上外观完全一样,真正做到平台独立

    import javax.swing.*;

熟悉4个顶层容器和常用的中间容器

  • 顶层容器

    • JFrame用来创建application,最常用的

      JApplet用来创建applet

      JDialog用来创建对话框,常用

      JWindow不常用

  • 中间容器

    • JPanel提供一个面板

      JScrollPane是具有滚动条的窗格

      JSplitPane是具有拆分功能的窗格

      JTabbedPane是带有若干标签的分类窗格

      JInternalFrame用于创建内嵌于JFrame中的内部框架

      Box 提供创建横向/纵向盒子容器的功能

  • 基本组件

掌握JFrame

  • 构造方法
    • JFrame() 创建无标题窗口。
    • JFrame(String s) 创建标题名字是字符串s的窗口。
  • 常用方法
    • getContentPane() JFrame 不是一个容器而是一个框架,可以通过getContentPane()方法得到JFrame的content pane
    • setTitle(String title) 设置JFrame标题文本
    • get/setSize():获取/设置JFrame的大小。
    • add(Object a):将组件添加到JFrame中。
    • dispose()关闭JFrame并回收用于创建窗口的任何资源。
    • setVisible(boolean b)设置JFrame的可见性。
    • setLocation(x,y) 设置JFrame在屏幕的位置
    • void setExtendedState(int); 设置扩展的状态
    • void setDefaultCloseOperation(int); 设置默认的关闭时的操作
    • setIconImage(image); 设置JFrame的图标

基本组件

  • 标签(JLabel)是最简单的组件,用于显示单行静态文本。

    • 构造

      JLabel label1 = new JLabel(“姓名”); ImageIcon ii = new ImageIcon(“java.gif”); JLabel label2 = new JLabel(ii); JLabel label3 = new JLabel(“姓名”,ii,JLabel.CENTER);

    • 方法

      setText、setIcon

  • 按钮(JButton)

    • 构造

      JButton button1 = new JButton(“姓名”); ImageIcon ii = new ImageIcon(“java.gif”); JButton button2 = new JButton(ii); JButton button3 = new JButton(“姓名”,ii);

    • 方法

      void setActionCommand(String); void addActionListener(ActionListener);

  • 文本框(JTextField

    • 构造

      JTextField tf1 = new JTextField(10);

      JTextField tf2 = new TextField(“aa”);

      JTextField tf3 = new JTextField(“aa”,8);

    • 方法

      public String getText()

      public String getSelectedText()

      public void setText(String s)

      public void setEchoChar(char c)

      public void setEditable(boolean b)

  • 文本区(JTextArea)

    • JTextArea ta = new JTextArea(10,10);
    • JScrollPane sp = new JScrollPane(ta); //将文本区对象放入一个滚动窗格中
  • 单选按钮( JRadioButton )

    • 方法

    • void addActionListener(ActionListener);

      void addItemListener(ItemListener);

      boolean isSelected();

      void setSelected(boolean);

    • 按钮组(ButtonGroup)维持只有一个单选按钮处于选择状态

  • 复选框(JCheckbox)

  • 列表框(JList)

  • 下拉列表( JComboBox )

  • 密码域( JPasswordField )

  • 滑动条(JSlider )

会对组件进行布局

  • FlowLayout 流式布局:该布局以行为单位依次排列各组件,一行排不下时,另起一行
    • JPanel的默认布局
  • BorderLayout 边界布局:按照东、西、南、北、中5个方位排列各组件
    • 顶层容器JFrame、JApplet、JDialog、JWindow的默认布局
  • GridLayout 网格布局
  • GridBagLayout 网格包布局
  • CardLayout 卡片布局:该布局以一叠卡片的形式依次排列各组件
  • BoxLayout 盒式布局:以一行或一列的方式依次排列各组件
  • null 空布局(不使用布局)

熟悉常用基本组件的创建和操作

会设置组件的颜色和字体

AWT组件及其事件处理机制

  • 事件处理
    • 事件源——发生事件的对象,如:按钮 单击按钮会触发ActionEvent事件
    • 监听器——对事件源实施监视的对象,如:包含按钮的窗口
    • 处理事件的接口——监听器对象自动调用一个方法,负责处理事件源发生的事件。 该事件由ActionListener接口来监听

其他

流(Stream)、文件(File)和IO

#### 字节流方法

字节输入流InputStream主要方法:

  • read() :从此输入流中读取一个数据字节。
  • read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
  • read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
  • close():关闭此输入流并释放与该流关联的所有系统资源。

字节输出流OutputStream主要方法:

  • write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。
  • write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
  • write(int b) :将指定字节写入此文件输出流。
  • close() :关闭此输入流并释放与该流关联的所有系统资源。

字符流方法

字符输入流Reader主要方法:

  • read():读取单个字符。
  • read(char[] cbuf) :将字符读入数组。
  • read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。
  • read(CharBuffer target) :试图将字符读入指定的字符缓冲区。
  • flush() :刷新该流的缓冲。
  • close() :关闭此流,但要先刷新它。

字符输出流Writer主要方法:

  • write(char[] cbuf) :写入字符数组。
  • write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
  • write(int c) :写入单个字符。
  • write(String str) :写入字符串。
  • write(String str, int off, int len) :写入字符串的某一部分。
  • flush() :刷新该流的缓冲。
  • close() :关闭此流,但要先刷新它。

另外,字符缓冲流还有两个独特的方法:

  • BufferedWriternewLine()写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。
  • BufferedReaderreadLine() :读取一个文本行。
img

Java内存

  • 方法区(静态区,method):
    • 类的元数据信息:每个被加载的类都有对应的元数据,包括类的名称、访问修饰符、字段信息、方法信息等。这些信息在方法区中被存储。
    • 运行时常量池:每个类都有自己的常量池,其中包含类中使用的常量、字面量和符号引用。这些在编译时生成,运行时存储在方法区的运行时常量池中。
    • 静态变量:类的静态变量被存储在方法区中,它们是类级别的变量,而不是实例级别的。
    • 类的字节码:类经过编译后产生的字节码也会被存储在方法区中。这些字节码被JVM加载后转换成运行时的机器码。
    • 类和方法的其他相关信息:方法区还包括其他与类和方法相关的信息,如方法的字节码、方法的访问修饰符、方法的异常表等。
  • 堆(heap)
    • 对象实例: 所有通过 new 关键字创建的对象实例都存储在堆中。这包括类的实例、数组以及任何动态分配的对象。
    • 实例变量: 对象的实例变量也存储在堆中。这些变量定义了对象的状态和特征,并在对象创建时分配内存。
    • 数组: Java中的数组也是对象,因此它们的数据存储在堆中。无论是基本数据类型的数组还是对象类型的数组,它们都被存储在堆内存中。
    • 垃圾回收信息: Java的堆还包含垃圾回收器所需的信息,用于管理对象的生命周期和内存的回收。
  • (Stack):小、快
    • 局部变量:方法中定义的局部变量,包括基本数据类型(如int、boolean等)和对象的引用。这些变量的生命周期与方法的执行周期相关联,在方法执行期间分配,在方法执行结束时释放。

    • 方法调用和执行信息:每次方法调用时,栈会存储调用的方法所需的信息,包括方法的参数、返回地址、方法的执行状态等。当方法调用结束时,栈会弹出该方法的信息,恢复上一个方法的执行状态。

    • 操作数栈:栈中还包括一个操作数栈(Operand Stack),用于存放方法执行过程中的临时数据和运算结果。例如,在方法中进行算术运算或者对象引用的操作时,临时结果会被压入操作数栈,进行计算后再弹出。

  • 例题:
    • 类方法的定义只会在类加载时存储在方法区中,并且被所有实例共享;而实例方法的引用会存在于对象的内存空间中,但实际方法的定义并不会复制到每个对象中。

修饰符分类

  • 访问修饰符
    • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
    • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
    • public : 对所有类可见。使用对象:类、接口、变量、方法
    • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • 非访问修饰符
    • static 修饰符,用来修饰类方法和类变量。
    • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
    • abstract 修饰符,用来创建抽象类和抽象方法。
    • synchronized volatile 修饰符,主要用于线程的编程。

复习PPT

JDBC(Java数据库连接)

image-20231226144610571

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

//1、导入驱动jar包
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");

//3、获取数据库的连接对象
Connection con = DriverManager.getConnection("url", "root", "123456789");

//4、获取执行sql语句的对象
Statement stat = con.createStatement();

//5.1、执行sql查询并接收返回结果
ResultSet resultSet = statement.executeQuery("SELECT * FROM tableName");

//5.2、执行sql并接收返回结果
int rowsAffected = statement.executeUpdate("UPDATE tableName SET column = value WHERE condition");

//6、处理结果
while (resultSet.next()) { //指针移动下一行
    int id = resultSet.getInt("id"); // 通过列名或列索引获取整数
    String name = resultSet.getString("name"); // 通过列名或列索引获取字符串
    double price = resultSet.getDouble("price"); // 通过列名或列索引获取双精度数值
}

//7、释放资源
stat.close();
con.close();
resultSet.close()

Applet

image-20231226153307577

<applet code="HelloWorldApplet.class" width="320" height="120">
import java.applet.*;   
import java.awt.*;   
public class JavaApplet extends Applet{
    public void paint(Graphics g)
    {
        g.setColor(new Color(255, 0, 0)); // 设置颜色为红色
        g.setFont(new Font("宋体", Font.BOLD, 20)); // 0-正常-PLAIN; 1-粗体-BOLD;2-斜体-ITALIC
        g.drawString("Hello, Java Applet!", 50, 50); // 在 (50, 50) 处绘制字符串
        g.drawLine(50, 50, 200, 50); // 起点 (50, 50),终点 (200, 50)
        g.drawRect(50, 100, 150, 80); // 左上角坐标 (50, 100),宽 150,高 80
        g.fillRect(250, 100, 150, 80); // 左上角坐标 (250, 100),宽 150,高 80
    }
}

异常处理

image-20231226153445381

// 抛出异常的函数
    public static void exampleFunction() throws Exception {
        // 在这个例子中,我们手动抛出一个异常
        throw new Exception("这是一个示例异常");
    }

    public static void main(String[] args) {
        try {
            // 调用可能抛出异常的函数
            exampleFunction();
        } catch (Exception e) {
            // 捕获并处理异常
            System.err.println("捕获到异常: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // 无论异常是否被捕获,finally 块中的代码都会执行
            System.out.println("无论如何都会执行的代码块");
        }
    }

字符串操作

image-20231226154030401

字节流、字符流、缓冲流

image-20231226153930902

File - FileOutputStream - BufferedOutputStream

File - FileOutputStream - OutputStreamWriter - BufferedWriter

File - FileWriter - BufferedWriter

主要方法:(字节流就是byte,字符流就是char

  • read():读取单个字符。
  • read(byte[] cbuf) :将字符读入数组。
  • write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。返回一个长度,到达流的末尾返回-1
  • close() :关闭此流
// BufferedInputStream、BufferedOutputStream(缓冲字节流)
public class IOTest {

	public static void write(File file) throws IOException {
		// 缓冲字节流,提高了效率
		BufferedOutputStream bis = new BufferedOutputStream(new FileOutputStream(file, true));

		// 要写入的字符串
		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
		// 写入文件
		bis.write(string.getBytes());
		// 关闭流
		bis.close();
	}

	public static String read(File file) throws IOException {
		BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));

		// 一次性取多少个字节
		byte[] bytes = new byte[1024];
		// 用来接收读取的字节数组
		StringBuilder sb = new StringBuilder();
		// 读取到的字节数组长度,为-1时表示没有数据
		int length = 0;
		// 循环取数据
		while ((length = fis.read(bytes)) != -1) {
			// 将读取的内容转换成字符串
			sb.append(new String(bytes, 0, length));
		}
		// 关闭流
		fis.close();

		return sb.toString();
	}
}
// InputStreamReader、OutputStreamWriter(字符流)
public class IOTest {
	
	public static void write(File file) throws IOException {
		// OutputStreamWriter可以显示指定字符集,否则使用默认字符集
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8");
        //FileWriter fw = new FileWriter(file, true);

		// 要写入的字符串
		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
		osw.write(string);
		osw.close();
	}

	public static String read(File file) throws IOException {
		InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
		// 字符数组:一次读取多少个字符
		char[] chars = new char[1024];
		// 每次读取的字符数组先append到StringBuilder中
		StringBuilder sb = new StringBuilder();
		// 读取到的字符数组长度,为-1时表示没有数据
		int length;
		// 循环取数据
		while ((length = isr.read(chars)) != -1) {
			// 将读取的内容转换成字符串
			sb.append(chars, 0, length);
		}
		// 关闭流
		isr.close();

		return sb.toString()
	}
}
// BufferedReader、BufferedWriter(字符缓冲流)
public class IOTest {
	
	public static void write(File file) throws IOException {
		// BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"));
		// FileWriter可以大幅度简化代码
		BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));

		// 要写入的字符串
		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
		bw.write(string);
		bw.close();
	}

	public static String read(File file) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(file));
		// 用来接收读取的字节数组
		StringBuilder sb = new StringBuilder();

		// 按行读数据
		String line;
		// 循环取数据
		while ((line = br.readLine()) != null) {
			// 将读取的内容转换成字符串
			sb.append(line);
		}
		// 关闭流
		br.close();

		return sb.toString();
	}
}

File

file.exists()

file.createNewFile();

file.delete();

import java.io.File;
import java.io.IOException;

public class FileTest {
	public static void main(String[] args) throws IOException {
		File file = new File("D:\\Download\\test.txt");

		// 判断文件是否存在
		if (!file.exists()) {
			// 不存在则创建
			file.createNewFile();
		}
		System.out.println("文件的绝对路径:" + file.getAbsolutePath());
		System.out.println("文件的大小:" + file.length());

		// 刪除文件
		file.delete();
	}
}

HTML & JSP - WEB开发

<%@page language="java"  pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<%@page import="cn.edu.swjtu.news.entity.*"%>
<%@page import="cn.edu.swjtu.news.dao.NewsDao"%>
<%@page import="cn.edu.swjtu.news.dao.impl.NewsDaoImpl"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>新闻列表</title>
</head>
<body>
<table align="center" border="1">
	  <tr>
	  	  <th>主题</th> 
	      <th>标题</th> 
	      <th>作者</th>
      </tr>
<% 
	NewsDao newsDao=new NewsDaoImpl();
	List<News> list=newsDao.getAllnews();
	for(News tempNew:list)
	{		
%>   
	  <tr>
	  	  <td><%=tempNew.getNtname() %></td> 
	      <td><%=tempNew.getNtitle() %></td> 
	      <td>作者:<%=tempNew.getNauthor() %></td>
      </tr> 

<%
    }
%>
</table>
</body>
</html>
<html>
	<head>
		<title>菜鸟教程(runoob.com)</title>
	</head>
	<body>
		<h1>一级标题</h1>
		<h2> 二级标题</h2>
		<h3> 三级标题</h3>
		<p>我的第一个段落。</p>
	</body>
	<table border="1">
		<tr>
	  	  <th>主题</th> 
	      <th>标题</th> 
	      <th>作者</th>
      	</tr>
		<tr>
			<td> 1 </td> <td> 1 </td> <td> 1 </td>
		</tr>	
	</table>
</html>

GUI - Swing - 基本组件

image-20231226153357844
import javax.swing.*;
import java.awt.*;
public class J {
 
	public static void main(String[] args) {
		//创建窗口
		JFrame jf = new JFrame();
		jf.setTitle("这是一个窗口");    //设置窗口标题
		jf.setSize(800,600);
		//jf.setExtendedState(JFrame.MAXIMIZED_BOTH); //设置窗口最大化
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭方式

		Container con=jf.getContentPane();
		
		JPanel pan=new JPanel();

		JLabel l_ma=new JLabel("密码");
		pan.add(l_ma);
		JPasswordField password=new JPasswordField(20);
		password.setEchoChar('*');
		pan.add(password);


		JLabel l_xm=new JLabel("姓名");
		pan.add(l_xm);
		JTextField tf_name=new JTextField(20);
		pan.add(tf_name);

		JLabel l_xb=new JLabel("性别");
		pan.add(l_xb);
		JRadioButton  male = new JRadioButton("男", true);
		JRadioButton  female = new JRadioButton("女");
		ButtonGroup  group=new ButtonGroup();
		group.add(male);
		group.add(female);
		pan.add(male);
		pan.add(female); 

		JLabel l_ah=new JLabel("爱好");
		JCheckBox[] hobby={new JCheckBox("音乐"),new JCheckBox("足球"),new JCheckBox("绘画")};
		pan.add(l_ah);
		pan.add(hobby[0]);
		pan.add(hobby[1]);
		pan.add(hobby[2]); 

		JLabel  l_yx=new JLabel("院系");
		pan.add(l_yx);
		String[] departmentNames = {"计算机科学与技术系","电子信息与技术系","计算机工程系"};
		JComboBox  department = new JComboBox(departmentNames);
		department.setEditable(false);
		pan.add(department);
		
		
		JLabel   l_xk=new JLabel("选课");
		String[] coursesNames = {"数据结构","操作系统","网络原理","Java程序设计","分布式系统开发技术","计算机导论","密码学","计算机组成原理","编译原理","图形学"};
		JList course = new JList(coursesNames);
		pan.add(l_xk);
		pan.add(course);

		JLabel l_jf=new JLabel("加分");    
		pan.add(l_jf);
		JSlider addition = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
		addition.setMajorTickSpacing(10);
		addition.setMinorTickSpacing(5);
		addition.setPaintTicks(true);
		addition.setPaintLabels(true);
		addition.setSnapToTicks(true);
		pan.add(addition); 

		JButton b_sub=new JButton("确认");
		pan.add(b_sub);
		JButton b_save=new JButton("保存");
		pan.add(b_save); 

		JProgressBar progbar = new JProgressBar(JProgressBar.HORIZONTAL,0,100);
		progbar.setStringPainted(true);
		pan.add(progbar);

		JLabel l_jg=new JLabel("录入结果");
		JTextArea result=new JTextArea(10,30);
		JScrollPane sp=new JScrollPane(result);
		pan.add(l_jg); 
		pan.add(sp); 

		con.add(pan);
	
		jf.setVisible(true);
	}
}
image-20231228110640861

ActionListener接口的actionPerformed(ActionEvent e)方法,e.getSource()==btn 判断

import java.awt.*;
import java.awt.event.*;

class guessFrame extends Frame implements ActionListener
{
    private int number;
    Button btnGetNum=new Button("get");
    Button btnEnter=new Button("yes");
    Label lblInfo=new Label("guess",Label.CENTER);
    TextField txtInput=new TextField("0",10);
    
    guessFrame(String s) 
    {
    	super(s);
       	setSize(300,200);
		setResizable(false);
		setVisible(true);
		setLayout(new FlowLayout());

		//lblInfo.setBounds(50,50,120,20);
		add(lblInfo);
		//txtInput.setBounds(50,80,120,20);
		add(txtInput);	
		//btnGetNum.setBounds(50,120,80,20);
		add(btnGetNum);
		//btnEnter.setBounds(150,120,50,20);
		add(btnEnter);
		
		btnGetNum.addActionListener(this);
		btnEnter.addActionListener(this);
	}
    //实现ActionListener接口中的actionPerformed方法(见下一页)
    public void actionPerformed(ActionEvent e)
	{
       if(e.getSource()==btnGetNum)		//单击 “得到随机数”接钮
       {
            number=(int)(Math.random()*100)+1;
       }
       else if(e.getSource()==btnEnter)		//单击 “确定”接钮
       {
            int guess=0;
            try
            {
	           guess=Integer.parseInt(txtInput.getText());	//获取文本框中的数值
	           if (guess==number)
	           {
	    	      lblInfo.setText("yes!");
	           }
	           else if(guess>number)
	           {
	    	      lblInfo.setText("high!");
	    	      txtInput.setText(null);
	           }	
	           else if(guess<number)
	           {
	    	      lblInfo.setText("low!");
	    	      txtInput.setText(null);
	           }		
            }
	 		catch(NumberFormatException event)
            {
	            lblInfo.setText("re");
	  		}
       }
	}	
}

public class guessNumber
{
	public static void main(String []args)
	{
        guessFrame guessfrm=new guessFrame("猜数游戏");
	}  
}

题目

  • 单项选择题(30分,每小题2分)
  • 程序填空题(20分,每空2分)
  • 程序阅读题(20分,每小题5分)
  • 程序设计题1(15分):html+jsp(WEB开发 文件夹内容)
  • 程序设计题2(15分):Gui 组件