课程总结

      这个学期我们开始学习了使用最广泛的变成语言之一——Java,它的简单性和平台无关性注定了它的地位,程序只要编写一次,就可到处运行。另Java是一个面向对象的语言,对我们而言,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。在一个面向对象的系统中,类是数据和操作数据的方法的集合。数据和方法一起描述对象的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。从最开始认识面向对象的概念到现在的多线程,仅仅不到半年便让我享受到了码农的乐趣,下面就来大致总结一下这个学期我认为比较重要的知识点吧~

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() :在此链接上回滚事务。

 

 
 
 
 
posted @ 2019-12-12 21:21  LittleTallest  阅读(181)  评论(0编辑  收藏  举报