基础
1.构造方法的声明有三个重点,(1)名称必须与类名称一致;(2)声明处不能有任何返回值类型声明;(3)不能在构造方法中使用return返回一个值。(一个类中至少有一个构造方法)
2.this关键字(不能在main()方法中使用)的三个作用,(1)表示类中的属性;(2)用this调用本类的构造方法(必须放在首行);(3)this表示当前对象。
3.static关键字简单来说,有static这个词,则具有一种公共属性,另外非static声明的方法可以调用static声明的属性或方法,但是static声明的方法不能调用非static类型声明的属性或方法。
数组
定义
初始化
元素表示方式
包
作用、定义、类的导入
String类
两种实例化方式:1.直接赋值;2.new。
两种实例化区别:1方法只会开辟一块堆内存空间,且会自动保存在对象池中以供下次重复使用;2方法会开辟两块堆内存空间,其中一块会成为垃圾空间。
两种比较方式:1.“==”比的是地址值;2.equals()方法比的是内容。
字符串的内容不可改变,如果同一个字符变量的内容改变了,则说明该变量指向了存储更改后的内容的空间(更改后的内容存在了一个新的空间处)的地址。
String类常用方法。
继承
概念
类的继承方式:class 父类{}
class 子类 extends 父类{}
继承的实现:通过继承的功能可以直接把父类中的操作直接拿到子类中使用,子类也可以定义自己的属性或方法。
注意:只可多层继承,不可多重继承;子类不能直接访问父类中的私有成员,可以调用父类中的非私有方法,但不能直接调用父类中的私有成员。
方法覆写:指子类定义了与父类中同名的方法。
覆写与重载的区别
重载 | 覆写 |
---|---|
方法名称同,参数类型或个数不同 | 方法名称、参数类型、返回值类型全部相同 |
对权限无要求 | 被覆写的方法不能有更严格的权限 |
发生在同一个类中 | 发生在继承类中 |
super()可以从子类中调用父类中的构造方法、普通方法、属性。
super(不能在main()方法中使用)调用父类的构造方法:语句必须放在子类构造方法的首行,父类没有构造方法时,会在父类中自动生成一个空的构造方法,然后通过在子类中用super();调用,若父类中构造了非空的构造方法,则不会再自动生成空构造方法,此时子类中调用父类的构造方法super();括号中要带参数。
this与super的区别
区别点 | this | super |
---|---|---|
属性访问 | 访问本类中的属性,如果本类没有此属性则从父类中查找 | 访问父类中的属性 |
方法 | 访问本类中的方法,如果本类没有此方法则从父类中查找(就近) | 直接访问父类中的方法 |
调用构造 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法的首行 |
特殊 | 表示当前对象 | 无此概念 |
抽象类
定义及使用:
(1)包含一个抽象方法的类必须是抽象类;
(2)抽象类和抽象方法都要用abstract声明;
(3)抽象方法只需声明而不需实现;
(4)抽象类必须被子类继承,如果子类不是抽象类,必须覆写抽象类的全部抽象方法。
final关键字
声明时注意:
(1)final声明的类不能有子类;
(2)final声明的方法不能被子类覆写;
(3)final声明的变量会成为常量。
对象的多态性
(1)子类对象->父类对象 (向上转型)
(2)父类对象->子类对象 (向下转型)
注:向上转型是自动的,向下转型是强制的,必须明确指明要转型的子类的类型,(为保证转型成功)向下转型之前必须先有对象向上转型。
格式:
向上 父类 父类对象 = 子类实例;
向下 子类 子类对象 = (子类)父类实例;
instanceof关键字
作用:在发生向下转型之前用于判断一个对象到底是哪个类的实例;
格式:对象 instanceof 类 --> 返回值是boolean型;
接口
定义格式:
interface 接口内容{
全局常量;
抽象方法;
}
实现接口的格式:
class 子类 implements 接口 A,接口 B,...{
}
一个子类既实现接口又继承抽象类 格式:
class 子类 extends 抽象类 implements 接口 A,接口 B,...{
}
抽象类实现接口格式:
abstract class 类名 implements 接口 A{
}
接口的继承 格式:
interface 子接口 extends 父接口 A,父接口 B,...{
}
注意:
(1)接口中的抽象方法必须是public的访问权限,不可改变,就算没写public,也是;
(2)要使用接口必须通过子类,子类通过implements关键字实现接口;
(3)一个子类可以同时实现多个接口;
(4)一个接口是不允许继承抽象类的,但一个接口允许继承多个接口。
抽象类与接口的应用
1.抽象类是在对象们有共同特性,也有不同时使用;共同属性在抽象类中赋值,不同点则创建抽象方法,在子类继承之后具体实现。
接口更多用于制定标准;接口中只有抽象方法,由子类实现接口之后具体实现,还要创建一个作用类似于“中转站”的类,在其中用前面创建的接口的类型的变量来应用具体的方法。
2.抽象类和接口都可以使用的话,优先使用接口,接口没有单继承的局限;
Object类
Object类主要讲了两个方法
toString():输出对象时调用该方法打印内容。
equals():Object类中的equals()方法默认是比较地址,返回值时boolean型,要比较内容的话,要在子类覆写。
String类的equals()方法是比较内容的,Object类的equals方法的本质和“==”一样,都是比较两个对象引用是否指向同一个对象(即两个对象是否为同一对象)。String类继承Object类后,也继承了equals方法,但String类对equals方法进行了重写,改变了equals方法的比较形式。
异常的捕获及处理
异常的概念:是导致程序中断运行的一种指令流。
异常处理格式:
try{
//可能出现异常的语句
}catch(异常类 异常对象){
//编写异常的处理语句
}...//catch()可以有多个
finally{
//一定会运行到的程序代码
}
最常用的异常类有:Exception、Error,都是Throwable的子类;Exception一般表示程序中出现的问题,可以直接使用 try...catch()处理;Error一般指JVM错误,程序无法处理。
程序中直接使用Exception进行其他异常捕获。
在java中所以捕获范围小的异常必须放在捕获范围大的异常前面,否则编译时会出现错误提示。
throws关键字
定义方法时使用throws声明,表示此方法不处理异常,而交给方法调用处进行处理;
在主方法处使用throws,只能将异常抛给JVM进行处理。
throw关键字
使用throw可以直接抛出一个异常,即抛出异常类的实例化对象。
大多时候用户自定义异常类型都要用throw来抛出。
Exception类与RuntimeExceptuion类
Exception在程序中必须用try-catch结构处理,RuntimeExceptuion可以不使用(最好还是用一下)try-catch结构处理,如果有异常产生,则由JVM处理。
线程的实现
一个类只要继承了Thread类就被称为多线程操作类,该类必须明确覆写Thread类的run()方法,这个方法是线程的主体。
多线程定义:
class 类名称 extendsThread{
属性...;
方法...;
public void run(){
线程主体;
}
}
注意:
Thread类中已有setName()和getName()得到线程的名称,且不能覆写。
正确启动多线程要调用从Thread类中继承来的start()方法,不能直接调用run()方法。
Runnable接口和Thread类的区别:继承Thread类不能共享资源,实现Runnable接口可以共享资源。
线程的一些主要方法;
取得和设置线程的名称:取得名称用Thread.currentThread().getName(),手工设置线程名称是在启动线程时new Thread(对象名称,"线程名称").start();
中断线程:在一个线程运行时,另一个线程可以直接通过interrupt()方法中断其运行状态;
同步:在多个线程操作同一资源时,有可能出现资源的同步问题,使用“同步代码块”或“同步方法”来避免;
同步代码块:
synchronized(同步对象){
//需要同步的代码
}
同步方法:
synchronized 方法返回值 方法名称(参数列表){
//方法体
}
File类
File类的构造方法:
public File(String pathname); 实例化File类的时候,必须设置好路径
File类的主要操作方法:
File类的常量:pathSeparator表示; separator表示
RandomAccessFile类的常用操作方法;
注意:
1.主方法实际上也是一个线程;
2.在java运行时至少会启动两个线程:一个是main线程,另一个是垃圾收集线程;
3.在调用yield()方法做线程礼让时,会将当前线程暂停一下,让其它线程进行,但是是否会礼让成功,由CPU决定。
字节流与字符流基本操作
字节流中输出主要用OutputStream类(通过子类实例化),输入主要用InputStream类(通过子类实例化);
字符流中输出主要用Writer类(通过子类实例化),输入主要用Reader类(通过子类实例化);
如果要操作一个文件:
字节流可以使用FileOutputStream类和FileInputStream类(各自有相应的操作方法);
字符流可以用FileWriter类(是OutputStreamWriter的子类)和FileReader类(是InputStreamReader的子类)(各自有相应的操作方法);
字节流与字符流的区别
字节流在操作时不会用到缓存区,是基于文件本身直接操作(这种方式适用范围更广),而字符流在操作时使用到缓存区,通过缓存区再操作文件(这种方式效率更高),但是如果程序没有关闭,缓存区的内容也无法输出。
想在不关闭的时候也可以将字符流的内容输出,则可以使用Writer类中的flush()方法完成。
转换流
OutputStreamWriter:是Writer的子类,将一个字符流的输出对象变为字节流的输出对象。
InputStreamReader:是Reader的子类,将一个字节流的输入对象变为字符流的输入对象。
不管是用字节流还是字符流最终都是以字节的形式操作输入/输出流的。
管道流
要想进行管道输出,则必须把输出流连在输入流上。连接管道有:
public void connect(PipedInputStream snk) throws IOException
System类对IO的支持
PrintStream是OutputStream的子类
System类中的三个常量:out(系统标准输出,一般是显示器),err(错误信息输出),in(标准输入,一般是键盘)。
System.out是PrintStream的对象,在PrintStream中定义了一系列的print()和println()方法。
System.err是错误信息的输出。
System.in是一个键盘的输入流。
注意:
此处所有的输入输出都以程序为参照;
操作时要对异常进行处理。
AWT
包括组件(Component)、容器(Container)、布局管理器(LayoutManager)3种工具类。
Swing
以AWT平台为基础构建成的新组件。
用JFrame类的方法创建一个窗口;
一个JFrame就表示一个容器,在容器上可以安装多个组件。
标签组件JLabel表示一个标签,用于显示信息(可以设置文字显示效果或显示图片),一般不能直接更改其显示内容;
创建完的Label对象可以通过Container类中的add()方法加入到容器中。
组件JButton表示一个按钮,使用此类可以直接在窗体增加一个按钮。
FlowLayout流式布局管理器,所有组件会依次进行排列,用FlowLayout类的常用方法及常量对窗体布局进行设置。
BorderLayout布局管理器是将一个窗体面板划分为东、西、南、北、中5个区域进行设置。
GridLayout布局管理器以表格的形式进行管理,使用时必须设置显示的行数和列数(行优先,满足行数要求后,再排列数)。
CardLayout布局管理器是将一组组件彼此重叠地进行布局,每次只会展现一个界面。
绝对定位是通过设置组件的绝对坐标来完成布局,通过setBounds()方法设置坐标。
public void setBounds(int x,int y,int width,int height)
使用绝对定位不管窗体如何改变大小,组件的位置是固定不变的。
JPanel
常用容器之一,在JPanel中可以加入任意组件,然后将JPanel容器加到JFrame容器中即可,有两个方法。
JSplitPane
分割面板,讲一个窗体分为两个子窗体,可以水平或垂直排列。
JTabbedPane
可以在一个面板上设置多个选项卡。
JScrollPane
主要是为显示的内容加入水平或垂直的滚动条。
JDesktopPane与JInternalPane
在一个窗体出现多个子窗体,每个子窗体都无法超出父窗体的区域,其中JDesktopPane规定了一个父窗体的基本形式,JInternalPane规定了各个子窗体,JInternalPane需要加入到JDesktopPane中,JDesktopPane有2个方法,JInternalPane有3个方法.
事件处理
所有事件类都是EventObject类的子类。事件监听器是能够接收和处理事件的对象,所有事件监听器都是以监听接口的形式出现,处理时需要实现此接口。
WindowListener
专门处理窗体事件的监听接口。
使用窗体的addWindowListener(监听对象)方法即可注册事件监听。
在不需要对所有事件进行监听时,为了便捷,在实现类和接口之间增加一个过渡的抽象类,子类继承抽象类就可以根据需要进行方法覆写,因此在事件处理中有很多的Adapter(适配器)类;如果某个监听处理只需操作一次,可以利用匿名内部类来完成操作。
键盘事件及监听处理
对键盘的操作进行监听可以直接使用KeyListener接口,此接口定义了3个方法,也可以使用KeyAdapter适配器进行监听。
如果要取得键盘键入的内容,可以通过KeyEvent取得,如:返回所按的键的信息 KeyEvent.getKeyText(e.getKeyCode),e是KeyEvent型的参数。
append方法可以追加输出内容,getKeyChar()方法无法识别功能键。
鼠标事件及监听处理
要对一个鼠标的操作进行监听,可以使用MouseListener接口,有5个方法,也可以使用MouseAdapter适配器进行监听。
每个鼠标事件触发后会产生MouseEvent事件,这个事件可以得到鼠标的相关操作。
单选钮
单选钮及在给出的多个显示信息中指定选择一个,在Swing中可以用JRadioButton完成一组单选钮的操作,有9个方法。
使用ButtonGroup可以将所有同类型的单选钮加入到一个组中,达到单选效果,但是只是在逻辑上将其分组,在加入容器时,还是用一般的方法。
JRadioButton操作可以使用ItemListener接口进行事件监听,有1个方法,没有相应的适配器方法,有ItemEvent事件。
JMenu与JMenuBar
JMenu可以建立菜单组件,建立完多个JMenu组件后,需要通过JMenuBar组件将其加入窗口中,JMenuBar组件的功能是用来摆放JMenu组件。
JMenuItem
使用JMenuItem组件可以为菜单中加入菜单项,JMenuItem可以理解为一种特殊的JButton组件,所以选择菜单项时会触发ActionEvent事件。
设置某个字符为助记符后,菜单项并不会显示出该助记符,要在该菜单项的命名上作出显示,然后该助记符底下会有一条下划线。
文件选择框JFileChooser
使用JFileChooser组件可以通过文件选择框选择要打开或保存的文件。
JDBC
主要操作类及接口
java.sql.DriverManager 用于管理jdbc驱动程序
Java.sql.Connection 用于建立与特定数据库的连接
Java.sql.Statement 一个Statement的对象用于执行静态sql语句,并获得语句执行后产生的后果
Java.sql.PreparedStatement 创建一个可以编译的sql语句对象,该对象可以多次被运行,以提高执行效率,是Statement的子接口
Java.sql.ResultSet 用于创建表示sql语句检索结果的结果集,用户通过结果集完成对数据库的访问
java.sql.Date 用于表示与SQL DATE相同的日期类型,该日期不包括时间
java.sql.Timestamp 用于表示SQL时间戳,并增加了一个能表示ns(纳秒)的时间域
等等...
MySQL数据库
常用命令
连接MySQL数据库:mysql -u 用户名 -p 密码
创建数据库:CREATE DATABASE 数据库名称;
删除数据库:DROP DATABASE 数据库名称;
使用数据库:USE 数据库名称;
创建数据库表:
CREATE TABLE 表名称(
字段名称1 字段类型 [DEFAULT 默认值] [约束],
字段名称2 字段类型 [DEFAULT 默认值] [约束],
...
字段名称n 字段类型 [DEFAULT 默认值] [约束]
);
删除数据库表: DROP TABLE 表名称;
查看表结构:DESC 表名称;
查看全部数据库:SHOW DATABASE;
查看一个数据库的全部表:SHOW TABLES;
SQL语法基础
创建数据库时人员编号使用AUTO_INCREAMENT完成自动增长列的操作。
MySQL数据类型23种。
向表中增加数据:INSERT INTO 表名称[(字段1,字段2,字段3,...,字段n)]VALUES(值1,值2,值3,...,值n);
删除表中数据:DELETE FROM 表名称 [删除条件]; 删除条件最好要指定,如果没有指定,则表示删除一张表中全部数据。
更新数据:UPDATE 表名称 SET 字段 1=值1,...,字段n=值1 [WHERE 更新条件]; 更新条件最好要指定,如果没有指定,则表示修改一张表中全部数据。
查询数据:
SELECT {*|column alias}
FROM 表名称 别名
[WHERE condition(s)]; --->设置查询条件
加载数据库驱动程序
package database;
public class Text {
public static final String DBDRIVER="ora.gjt.mm.mysql.Driver";
public static void main(String[] args) {
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
连接及关闭数据库
使用DriverManager类连接数据库和Connection接口
连接地址格式:
jdbc:mysql://IP地址:端口号/数据库名称