眨眼间,Java这门课程就快要到了尾声,这门课程主要学习到
搭建了Java的编译环境,安装eclipse软件,会用Java写一些简单的程序。
主要学习到的知识点有以下几点
1:通过写pta上的作业知道怎么写Java的输入,他是使用Scanner来处理输入的
2:了解了什么是类,类与对象的关系。类就是定义一个基本的模板,代表着一个共性,是表示一个客观世界某类群体的一些基本体征的抽象;而对象表示每一个具体的东西
3:了解了Java面向对象的第一大特性封装性
还学习了this类、static类
this
属性访问:访问本类中的属性,如果本类没有此属性则从父类中继续查找。
方法:访问本类中的方法,如果本类没有此方法则从父类中继续查找。
调用构造:调用本类构造,必须放在构造方法的首行。
特殊:表示当前对象。
static
如果在程序中使用static声明属性的话,则此属性属于全局属性;static声明的属性是所有对象共享的,在访问static属性时最好可以由类名称直接调用。
static既可以在声明属性的时候使用,也可以用其来声明方法,用它声明的方法有时也被称为类方法,可以由类名称直接调用。
非static声明的方法可以去调用static声明的属性或方法的。但是static声明的方法是不能调用非static类型声明的属性或方法的
对于main()方法也进行了一些学习,知道了main()方法每个参数的含义。学会另一种循环方法去遍历数组,如下:
for(String e:args){
System.out.println(e);
}
学习了两种为String赋值的方法;
1)
String str="Alice";
String str=new String("Alice");
String里的“==”是进行地址之间的比较,而不能直接比较内容,如果要比较内容需要需要使用到方法。public boolean equals(String str);
String一旦定义了,他的内容不可改变。
有关String里的一些方法。
还有学习了对象数组
类 对象数组名称[]=new 类[数组长度]
数据类型 数组名称[]=null;
数组名称=new 数据类型[长度];
包的基本概念,用法
包的定义:package 包名称.子包名称;
编译的时候要如下
javac -d . 名称.java
类的导入主要用 import.
import 包名称.子包名称.类名称;或
import 包名称.子包名称.*; //自动加载所需类
还了解Java的常用系统包。
学习了Java的另一特性继承性。
1)继承格式
class 父类{}
class 子类 extends{}
2)可以通过子类扩展父类
3)只允许多层继承,不允许多重继承。
4)子类不能直接访问父类中的私有操作,但可以通过get方法访问。
5)子类构造方法中的super()。一般写类的时候要构造一个空方法,因为一般子类对象实例化之前会先默认调用父类中的构造方法,如果父类中没有构造方法,就会默认调用一个空的构造方法。 super()就是调用父类构造方法的语句。
方法的覆写和重载
覆写:就是指子类中定义了与父类中同名的方法,但是要考虑权限,被子类覆写的方法不能拥有比父类方法更严格的访问权限,例如:父类(private)<=子类(private||public)。
重载:同一个类中相同名称不同参数的方法。
final关键字(表示的意思是最终的意思,也可以称为完结器)
1)使用final声明的类不能有子类
2)使用final声明的方法不能被子类所覆写
3)使用final声明的变量级成为常量,常量不可以修改
抽象类
1)包含一个抽象方法的类必须是抽象类。抽象方法如下:
访问权限 abstract 返回值类型 方法名称(参数);
2)抽象类和抽象方法都要使用abstract关键字声明
3)抽象方法只需声明而不需要实现
4)抽象类必须被子类继承,子类(如果不是抽象类)必须填写抽象类中的全部抽象方法
对象的多态性
1)向上转型:子类对象→父类对象(自动转换)
2)向下转型:父类对象→子类对象(强制转换)
继承:一个子类只能继承一个父类,不允许多重继承,但接口可以多重实现。
强制转换时,先转换成父类,再强制转换。
子类不能直接访问父类的私有操作,可以通过getter和setter间接访问父类的私有操作。
使用final定义类时,不能被继承,即使用final声明的类不能有有子类;不能被子类覆写;用final声明的变量即常量,常量不可修改。
Interface关键字:接口,接口里只可以有全局常量(每个字母需要大写)和抽象方法
Implements关键字:实现接口。
学了抽象类和接口
下表是抽象类与接口的关系
区别点
抽象类
接口
定义
包含一个抽象方法的类
抽象方法和全局常量的集合
组成
构造方法、抽象方法、普通方法、常量、变量
常量、抽象方法
使用
子类继承抽象类
子类实现接口
关系
抽象类可以实现多个接口
接口不能继承抽象类,但允许继承多个接口
常见
设计模式
模板设计
对象
都通过对象的多态性产生实例化对象
都通过对象的多态性产生实例化对象
局限
抽象类有单继承的局限
接口没有单继承的局限
实际
作为一个模板
是作为一个标准或是表示一种能力
选择
如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限
如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限
特殊
一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类
一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类
异常
异常是导致程序中断的一种指令流。
异常处理格式
try{
//有可能出现异常的语句
}catch(异常类 异常对象){
//编写异常处理的语句
}[catch(异常类 异常对象){
//编写异常处理的语句
}catch(异常类 异常对象){
//编写异常处理的语句
}...]
[finally{
一定会运行处理到的程序代码;
}]
异常类的继承结构
一般最常用的两个类:Exception、Error。
Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理
Error:一般指的是JVM错误,程序中无法处理
异常类
throws和throw
throws
使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理,格式如下:
public 返回值类型 方法名称(参数列表...)throws 异常类{}
throw
与throws关键字不同的是,可以直接使用throw关键字抛出一个异常,抛出时直接抛出异常类的实例化对象即可。
try{
throw new Exception("自己抛出的异常!");
}catch(Exception e){
System.out.println(e);
}
多线程
多线程的实现有两种方法继承Thread类和使用Runnable接口
Thread类不共享,Runnable接口共享。
Thread类
格式:
class 类名称 extends Thread{
属性...;
方法...;
public void run(){
线程主体;
}
}
想要实现多线程不是调用run()方法,而是start()方法。
多线程
Java中多线程的实现主要是通过继承Thread类或实现Runnable接口。其中Runnable接口可以资源共享。但不管使用哪种方法都要通过覆写run();在实例化的时候通过调用start()方法来启动多线程。
还学习了一些实现多线程的相关方法,例如:
Thread.getName();
Thread.currentThread();
isAlive(); 判断线程是否启动
join(); 线程的强制运行
Thread.sleep(); 线程的休眠
interrupt(); 中断线程
等等。。。
还有哪个线程的优先级高,哪个线程有可能优先被执行。
同步
同步代码块
synchronized(同步对象){ ///synchronized(this)this表示当前对象
需要同步的代码块;
}
同步方法
synchronized 方法返回值 方法名称(参数列表){
方法体
}
使用File类进行文件的操作
以下是针对文件本身操作的
createNewFile(); 创建新文件
delete(); 删除一个指定文件
mkdir(); 创建一个文件夹
public String[]list(); 列出全部名称,返回一个字符串数组
public File[]listFiles(); 列完整的路径,返回一个File对象数组
isDirectory(); 判断一个给定的路径是否是目录
RandomAccessFile类可以对文件内容进行操作
字节流和字符流的基本操作
1)字节输出流:outputStream
常用方法:close()关闭输出流
flush()刷新缓冲区
write()写入数据流(但只能以字节写入)
以上方法如果重新执行会覆盖文件中的已有内容,想要追加新内容通过FileOutputStream类的另一种构造方法进行实例化,如下:
File f=new File(路径);
OutputStream os=new FileOutpuStream(f,true);
2)字节输入流:InputStream
常用方法:available() 取得输入文件的大小
close()关闭输入流
read()读取内容
3)字符输出流:Writer
常用方法:close()关闭输出流
write()输出字符串或字符数组
flush()强制清空缓存
追加文件使用FileWriter类,同字节输出流
4)字符输入流:Reader
常用方法:close()关闭
read()读取字符到数组
字节流和字符流区别在于字节流直接对文件进行操作,而字符流是将数据先放在缓存之后,在写入文件的
转换流OutputStreamWriter类与IntputStreamReader类
OutputStreamWriter类是Writer的子类将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流的输出对象。如下
Writer w=new OutputStreamWriter(new FileOutputStream(f));
IntputStreamReader类是Reader的子类将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象
Reader r=new InputStreamReader(new FileInputStream(f));
内存操作流程
字节内存流:ByteArrayInputStream(内存字节输入流);ByteArrayOutputStream(内存字节输出流)
字符内存流:CharArrayReader(内存字节输入流);CharArrayWriter(内存字节输出流)
首先是要声明内存的输入输出流,再去进行操作。
管道流
主要作用是可以进行两个线程间的通信
管道输出流:PipedOutputSream;管道输入流:PipedInputStream
用connect()方法来连接输出和输入流
打印流PrintStream
打印流进行格式化和C语言差不多
System类
1)System.out 向显示器上输出,是PrintStream的对象,PrintStream是OutputStream的字类,所以可以使用OutputStream向屏幕输出
2)Syatem.err 错误信息输出
3)System.in 键盘的输入流,是InputStream的对象
图形界面
主要是基于AWT和Swing包来实现的
AWT(抽象窗口工具包)
主要包括以下三种工具类
1)组件:Component
2)容器:Container
3)布局管理器:LayoutManager
Swing (保存在Javax.swing中)
基本容器JFrame
常用操作方法:
创建一个窗体:JFrame f = new JFrame;
设置窗体大小:f.setSize(int width , int height);
设置窗体背景颜色:f.setBackground(Color.颜色);
设置窗体显示位置:f.setLocation(int x, int y);
显示窗体:f.setVisible(true);
注意:可以用Dimension类封装组件的宽高(用于批量修改时比较方便)
也可以用Point类来封装显示位置(除此之外还可以移动组件位置通过坐标,使用move(int x, int y)方法,使用translate(int dx, int dy)方法可以平移组件);
标签组件JLabel
可以通过创建完的JLabel对象通过Container类中的add()方法加入到容器中 如下:
Container cont = frame.getContentPane();
cont.add(label);
更改JLabel的文字样式,使用到Font类
public void setFont(Font f);
在JLabel中设置图片,使用Imagelcon类
Icon icon = new Imagelcon(路径);
JLabel label = new JLabel(icon,JLabel.CENTER) //实例化对象,使用居中对齐
f.add(label);
按钮组件JButton
建立一个按钮即new JButton()即可
在按钮上显示一个图片:
Icon icon = new Imagelcon(路径);
JButton button = new JButton(icon) //实例化
f.add(buttton);
布局管理器
1)FlowLayout(流式布局管理器)默认居中按照顺序依次排列
2)BorderLayout 将窗体依次分为东西南北中5个区域
3)GrideLayout 以表格形式进行管理,必须设置显示行数和列数(先满足行,再调列)
4)CardLayout 一组组件彼此重叠进行布局,每次只会显示一个界面
5)绝对布局 通过坐标指定组件放置的位置,窗体大小改变,组件位置也不会改变
public void setBounds(int x,int y,int width,int height);
JPane容器使用流失布局管理
frame pack()方法可以根据组件自动调整窗体大小
主要学习监听器及各种事件处理
1)键盘监听
使用KeyListener接口
2)鼠标监听
使用MouseListener接口,其中MouseEvent中有getButton(),getX(),getY()等方法
3)单选钮:JRadioButton及事件处理
方法:
setSelected();是否被选中
setText(String);设置显示文本
setIcon(Icon);设置图片
其事件处理使用ItenListener
4)复选框:JCheckBoxji事件处理
方法:
JCheckBox();创建文本对象
其事件处理也是用ItemListener接口
5)列表框:JList及事件处理
方法:
int[] getSeletrdIndices();返回所选择的所有数组
Jlist(ListModel/Object[] listData/Vector>listData);构造JList
其事件处理使用ListSelectionListener接口
菜单组件
JMenu、JMenuBar、JMenuItem可实现简单的菜单外观,使用事件监听可对应作出一些功能的实现,如代码记事本
1.对于jdbc的一个了解
主要常用操作类与接口:
java.sql.DriverManager 用于管理jdbc驱动程序
Java.sql.Connection 用于建立与特定数据库的连接
Java.sql.Statement 一个Statement的对象用于执行静态sql语句,并获得语句执行后产生的后果
Java.sql.PreparedStatement 创建一个可以编译的sql语句对象,该对象可以多次被运行,以提高执行效率,是Statement的子接口
Java.sql.ResultSet 用于创建表示sql语句检索结果的结果集,用户通过结果集完成对数据库的访问
2.MySQL的安装与配置
3.MySQL的常用命令
1)mysql -u用户名 -p密码 连接mysql数据库
2)创建数据库:CREATE DATABASE 数据库名称;
3)删除数据库:DROP DATABASE 数据库名称;
4)USE 数据库名称; 使用数据库
5)创建数据库表
CREATE TABLE 表名称(
字段名称1 字段类型 [DEFAULT 默认值][约束],
字段名称2 字段类型 [DEFAULT 默认值][约束],
...,
字段名称n 字段类型 [DEFAULT 默认值][约束]
);
6)删除数据库表 DROP TABLE 表名称;
7)查看表结构 DESE 表名称;
8)查看数据库信息
查看全部数据库:SHOW DATABASES;
查看一个数据库的全部表:SHOW TABLES;
4.配置mysql数据库的驱动程序
package textshujuku;
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();
}
}
}
5.连接及关闭数据库
使用DriverManager类连接数据库和Connection接口
连接地址
jdbc:mysql://IP地址:端口号/数据库名称
总之这学期对于Java还是有了一定的了解,虽然Java这门课程结束了,但并不代表学习Java的道路结束了,这只是刚刚开始,我还只是对他有一个粗浅的理解,而对于他的学习还有很多,再接再厉