这个学期我们开始学习了使用最广泛的变成语言之一——Java,它的简单性和平台无关性注定了它的地位,程序只要编写一次,就可到处运行。另Java是一个面向对象的语言,对我们而言,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。在一个面向对象的系统中,类是数据和操作数据的方法的集合。数据和方法一起描述对象的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。从最开始认识面向对象的概念到现在的多线程,仅仅不到半年便让我享受到了码农的乐趣,下面就来大致总结一下这个学期我认为比较重要的知识点吧~
一,Java知识
1、基础语法:java关键字,类型转换、循环语句、方法、运算符、递归。
2、面向对象编程(重中之重):面向对象设计思想、对象与内存(重点)、方法重载、对象创建使用、this的使用、final的使用、super的使用、 static的使用、package和import的运用、对象转型、多态、抽象类、接口等基本的知识点。其中重点掌握有封装、继承、多态、抽象类、接口。
3、异常处理:try{...}catch(exception e){...}、异常的分类、finally的使用、方法异常的抛出、自定义异常。
4、数组:基本的数组操作。二维数组的使用。
5、常用类:string类、stringbuffer类、math类、file类等等。
6、容器:java.util 包下,有三个接口list、set、map,list下面有arraylist、vector、linkedlist,set下有hashset、 treeset,map 下有hashmap、hashset,当然了,还有dictionary下的
hashtable,hashtable下的子类 properties,容器就这么一点东西。
7、java.io包:学过继承、多态、接口之后,容器和这一节就要用上,一开始是比较难理解,一旦理解了,通过触类旁通,其他也就是这样子学,这个io里面最典型的设计模式是:装饰设计模式,大家学习的时候也可以结合这个设计模式来学。
8、线程:线程的两种实现方式,synchronized关键字——同步,死锁等问题。
9、面向对象的语言;
10、一种与平台无关的语言,提供程序运行的解释环境;
11、一种健壮的语言(语法上没有指针,内存的申请与释放)。 面向对象的特点:封装性、继承性、多态性。
二,java语法基础
1、标识符,对大小写敏感,长度不限,包括字母、数字、下划线、美元符号;
2、关键字,全为小写;
3、java基本数据类型
(1)基本:数值型、字符型、布尔型(逻辑);
(2)引用:类、接口、数组。
数据类型转换时要注意布尔型不能转换为其他数据类型。容量小到容量大的转化为自动转化,反之为强制类型转化。
4、运算符,new也是一种运算符。类与对象类是客观存在的,抽象的,概念的东西。对象是具体的,实际的,代表一个事物。例如:车是一个类,汽车,自行车就是他的对象。
关于类与对象的描述:类是对象的模版,对象是类的一个个体。
Java中定义类的方法:class 类名
用Java语法定义人类:public class Person{}
对象的定义方法:
(1),对象声明:类名 对象名;
(2),对象创建 对象名 = new 类名(); new作用:分配内存空间。
也可以合写为:类名 对象名 = new 类名();
5、表达式和语句
6、分支即选择,双分支、多分枝可用switch
7、方法,方法的重载表示一个类中定义相同名字不同参数的多个方法,构造方法也可以重载。重写需注意:
(1)继承是重写的前提;
(2)重写只能改变方法体中的内容,方法名,参数列表、返回值类型都不能改变;
(3)方法重写不能使用比被重写的方法更严格的访问权限。
8、变量的作用
9、递归的调用
三,java关键字
(1)基本数据类型boolean、byte、char、short、int、long、float、double
(2)访问控制private、protected、public
(3)与类有关的关键字class、abstract、interface、extends、implements
(4)与对象有关的关键字new、instanceof、this、super、null
(5)与方法有关的关键字void、return
(6)控制语句if、else、switch、case、default、for、do、while、break、 continue
(7)逻辑值true、false (8)异常处理try、catch、finally、throw、throws
(8)异常处理try、catch、finally、throw、throws
(9)其他transient、volatile、package、import、synchronized、native、final、staticstrictfp
(10)停用的关键字goto、const
1.instanceof关键字
在java中可以使用instanceof关键字判断一个对象到底是不是哪个类的实例
对象instanceof类→返回boolean类型
2.接口
接口是java中最重要的概念,接口可以理解为一种特殊的类,由全局变量和公共的抽象方法所组成。
实现接口
接口要使用也必须通过子类,子类通过implements关键字实现接口
3.继承抽象类实现接口
一个子类可以同时继承抽象类和实现接口
接口和抽象类的使用限制
· 允许一个抽象类实现多个接口
· 一个接口是不允许继承抽象类的
· 允许一个接口继承多个接口
· 一个接口不能继承一个抽象类,但是可以通过extends关键字同时继承多个接口,实现接口的多继承。
异常
· 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失。
· 异常代表了一种意外的情况,代表了正常情况下不会发生的情况。
· 在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保住程序的正常执行。
异常处理格式
try{
//有可能出现异常的语句
}catch(异常类 异常对象){
//编写异常处理语句
}[catch(异常类 异常对象){
//编写异常处理语句
}...]
[finally{
一定会运行到的代码;
}]
Java的异常处理机制
Java异常处理也是按照面向对象的方式进行处理的。
步骤如下:
1 一旦产生异常,则首先会产生一个异常类的实例化对象;
2 在try语句中队异常对象进行捕捉;
3 产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码
使用Exception处理其他异常
· 根据对象的多态性,所以的子类实例可以全部使用父类接收,那么就可以利用向上转型的概念,让所有的异常对象都使用Exception接收。
· 注意:在Java中所以捕获范围小的异常,必须放在捕获范围大的异常之前,否则程序在编译的时候就会出现错误提示。
throws关键字
在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理,而是交给方法调用处进行处理。
throw关键字
可以直接使用throw抛出一个异常,抛出的时候直接抛出异常类的实例化对象即可。
注意:throw不会单独的使用
· throw关键字的使用完全符合异常处理机制
· 但是,一般来讲用户都在避免异常的产生,所以不会手工抛出一个新的异常类的实例,而往往会抛出程序中已经产生的异常实例类。
Exception与RuntimeException
这两类的区别如下:
· Exception在程序中是必须使用try...catch进行处理。
· RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将有JVM进行处理。
进程与线程
● 进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
● 多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。
Java中线程的实现
● 在Java中要实现多线程代码的两种手段:
● 继承Thread类
● 实现Runnable接口
启动线程
线程的主要代码是在run方法里写的,但是启动的时候是调用Thread的start方法启动。
Thread类和Runnable接口的区别
● 实际上Thread类和Runnable接口之间在使用上也是有所区别的,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。
线程的状态
● 要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。
线程操作的主要方法
判断线程是否启动
● 通过Thread类之中的start()方法通知CPU这个线程己经准备好启动,之后就等待分配CPU资源,运行此线程了。那么如何判断一个线程是否已经启动了呢?在Java中可以使用isAlive()方测试线程是否已经启动而且仍然在启动。
线程的强制运行
● 在线程操作中, 可以使用join()方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。
线程的休眠
● 在程序中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可。
中断线程
● 当一个线程运行的时候,另外一个线程可以直接通过interrrupt()方法,中断其运行状态。
JavaIO基础图关系
流
· 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。
字节流与字符流
· 在java.io包中操作文件内容的主要有两大类:
字节流
字符流
· 两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使用的是InputStream, 在字符流中输出主要是使用Writer类完成, 输入主要是使用Reader类完成。
字节流
· 字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream。
字节输出流: OutputStream
字节输入流: InputStream
追加新内容
· 之前的所有操作中,如果重新执行程序, 则肯定会覆盖文件中的已有内容, 那么此时可以通过FielOutputStream
向文件中追加内容,FileOutputStream的另外一个构造方法:
public FileOutputStream(File file,boolean append) throwsFileNotFoundException
· 在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。
字节输入流: InputStream
· 既然程序可以向文件中写入内容,则就可以通过InputStream从文件中把内容读取进来,首先来看InputStream类的定义:
public abstract class InputStream extends Objectimplements Closeable
· 与OutputStream类一 样, InputStream本 身也是-一个抽象类,必须依靠其子类, 如果现在是从文件中读取,子类肯定是FileInputStream。观察FileInputStream类的构造方法:
public FilelnputStream(File file) throws FileNotFoundException
字符流
· 在程序中一个字符等于2个字节,那么JAVA提供了Reader、Writer两 个专门操作字符流的类。
字符输出流: Writer
字符输入流: Reader
使用FileWriter追加文件的内容
· 在使用字符流操作的时候,也可以实现文件的追加功能, 直接使用FileWriter类中的以下构造即可实现追加:
public FileWriter(File file,boolean append) throwsIOException
将append的值设置成true,就表示追加。
字符输入流: Reader
· Reader是使用字符的方式从文件之中取出数据,Reader类的定义如下:
public abstract class Reader extends Object implementsReadable, Closeable
· Reader本身也是抽象类,如果现在要从文件中读取内容,则可以直接使用FileReader子类。. FileReader的构造方法定义如下:
public FileReader( File file) throwsFileNotFoundException
字节流与字符流的区别
· 字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。
OutputStreamWriter和InputStreamReader
· 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。
· OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流输出对象。
· InputStreamReader: 是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
管道流
· 管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream) 、管道输入流(PipedInputStream),如果要想进行管道输出,则必须把输出流连在输入流之上,在PipedOutputStream类上有如下的一个方法用于连接管道:
· public void connect(PipedInputStream snk) throws IOException
打印流
· 在整个IO包中,打印流是输出信息最方便的类,主要包含:
· 字节打印流(PrintStream)
· 字符打印流(PrintWriter)
· 打印流提供了非常方便的打印功能,可以打印任何的数据类型,例如:小数、整数、字符串等等。
GUI
Java图形开发有两种可以使用的技术:AWT、Swing
· AWT:大量使用Windows的系统函数
· Swing:采用Java实现用户界面,可以在任意的系统平台上工作
AWT
AWT(Abstract Windowing Toolkit),抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
AWT中的所有工具类都保存在java.awt包中,此包中的所有操作类可用来建立图形用户界面(GUI)的类,这些类又被称为组件(components)。
AWT包中提供的所有工具类,主要分为以下三种:
➢ 组件:Component
➢ 容器:Container
➢ 布局管理器:LayoutManager
组件
➢ 在图形界面中,用户经常会看到按钮、标签、菜单等组件。
➢ 组件会在一个窗体上显示。
➢ 在整个AWT包中,所有的组件类都是从Component和MenuComponet扩展而来的,这些类会继承这两个类的公共操作。
容器(Container)
➢ 所有的AWT组件都应该放到容器之中。
➢ 在容器中,所有的组件都可以设置在容器中的位置、大小等。
➢ 所有的容器都是Component的子类。
布局管理器(LayoutManager)
➢ 使用布局管理器可以使容器中的组件按照指定的位置进行摆放。即使容器改变了大小,布局管理器也可以准确的把组件放到指定的位置,这样就可以有效
的保证版面不会混乱。
➢ 在AWT中所有的布局管理器都是LayoutManager的子类。
Swing简介
➢ AWT大量的引入了Windows函数, 称为重量级组件。
➢ Swing使 用Java语言实现,是以AWT平台为基础构建起来的新组件,属于轻量级的图形界面组件,直接使用Swing可以更加轻松的构建用户界面。
Dimension类
➢ 在JFrame中设置窗体的大小,也可以使用Dimension类完成。➢此类封装了组件的现实宽度和高度。
Point类
➢ 组件的显示位置也可以使用Point类指定,此类封装的是显示位置的X、Y坐标。
JButton组件
JButton组件表示一个普通的按钮,直接使用此类就可以在窗体中增加一个按钮。
布局管理器
· 使用布局管理器可以管理组件的显示位置,每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,都要用到布局管理器。
· 在Swing中使用的所有布局管理器都实现LayoutManager接口,在Swing中主要使用以下五种常见的布局管理器:
➢ FlowLayout
➢ BorderIayout
➢ GridIayout
➢ Cardlayout
➢ 绝对定位。
FlowLayout
FlowLayout属于流式布局管理器,使用此种布局方式,所有的组件会像流水一样一次进行排列。
BorderLayout
BorderI ayout将一个窗体的版面划分成东、西、南、北、中五个区域,可以直接将需要的组件放到这五个区域中即可。
GridLayout
➢ GridIayout布局管理器是以表格的形式进行管理的
➢ 在使用此布局管理器的时候必须设置显示的行数和列数
CardLayout
➢ CardLayout就是将一组组彼此重叠的组件进行布局,就像一张张卡片一样,这样每次只会展现一个界面。
JSplitPane
JSplitPane主要功能是分割面板,可以将一个窗体分为两个子窗体,可以是水平排列也可以是垂直排列。
JTabbedPane
➢ JTabbedPane是在一个面板上设置多个选项卡供用户选择
➢ 如果用户需要查看相关方面信息,直接点开选项卡即可浏览,通过这种方式可以方便的管理相关信息。
JDesktopPane与JInternalFrame
➢ 在Swing中也可以完成内部窗体的显示,在一个窗体中可以显示多个子窗体,每一个子窗体都无法超出父窗体的区域。
➢ JDesktopPane规定了一个父窗口的基本形式。
➢ JInternalFrame规定了各个子窗体,JInternalFrame需 要加入到JDesktopPane之中。
常用接口
1.Driver接口
Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:
装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
2.Connection接口
Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。
连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port;
DatabaseName=database", "user", "password");
常用方法:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。