课程总结
本学期面向对象与Java程序设计课程已经全部结束了,但Java程序设计的学习还远未到终点,大家就本学期的课程作一个全面的总结吧。
学期学习总结:
1.数据类型
不同数据类型可表示的数据范围,由低到高分别是byte、short、char--》int--》long--》float--》double。数据类型的转换包括自动类型转换和强制类型转换,如果数据超过原有数据类型可表示的范围,就需要进行强制类型转换。
2.运算符
有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符。逻辑运算符包括与和或,与要求返回值都为真,结果才为真,或只要有一个为真结果就为真。与中有“&”和“&&”,“&”要求所有条件都判断,而“&&”如果第一个条件为false,则后面的条件将不再判断。或包含“|”和“||”,“|”要求条件都判断,“||”第一个条件为true,则后面的条件将不再判断。
3.类和对象
对象是一类事物的实例,是具体的类是对一类事物的描述,是抽象的类是对象的模板,对象是类的实体。类中包括声明成员变量和定义方法的内容。然后为了使用这个类,就必须创建并实例化对象,就可以使用对象访问类中的属性或方法,调用tell()方法把内容输出。其中注意使用对象前必须实例化。每个类都可以产生多个实例化对象,只要在实例化对象中使用了关键字就开辟了新的堆内存空间,每一个实例化对象都会有自己的堆、栈内存空间。
类的定义:
class 类名称{ 数据类型 属性; ····· public 返回值的数据类型 方法名称(参数1,参数2,···) 程序语句; [return 表达式;] } }
创建对象:
类名 对象名称=new 类名();
4.封装性
封装性是面向对象的第一大特性,封装方法是在属性名称和方法名称前加private,加入此关键字后程序无法进行编译,不能由对象直接进行访问,必须通过setter和getter方法设置和取得。
5.构造方法
构造方法定义:
class 类名称{ 访问权限 类名称(类型1 参数1,类型2,参数2,···) 程序语句; ····· } }
1)构造方法的名称必须与类名称一致;
(2)构造方法的声明处不能有任何返回值类型的声明;
(3)不能在构造方法中使用return返回一个值。
6.String类
string可以采用直接赋值的方式进行操作,也可以通过new方法实例化,String的比较有两种方式:2个字符串使用==比较运算符,比较的是地址值,如果使用的是equals方法,比较的是字符串内容是否相等。
7.this关键字
(1)可以使用this强调本类中的方法、
(2)表示类中的属性、
(3)可以使用this调用本类的构造方法、
(4)this表示当前对象、
8.static关键字
1)修饰成员变量和成员方法
2)静态代码块
3)修饰类(只能修饰内部类)
9.继承
子类可以继承父类非private的属性、方法。子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。Java的继承是单继承,不可以多重继承,允许进行多层继承。子类对象在实例化之前会默认调用父类中的构造方法。所以在实例化子类对象之前需要先将父类中的属性进行初始化。
继承格式:
class 父类{} class 子类 extends 父类{}
10.方法的覆写
子类定义了与父类方法名称,返回值类型、参数类型及个数完全相同的方法。被覆写不能够拥有比父类更为严格的控制权限。public>default(不加任何说明 包访问权限)>private(只能在本类中使用)
重载:方法名称相同,参数的个数或类型不同。不能有两个名字相同,参数类型也相同却返回值不同的方法。
方法的重载和覆写的区别:
重载 | 覆写 |
方法名称相同,参数的个数及类型不同 | 方法名称,返回值类型,参数的个数,参数的类型均相同 |
对权限没有要求 | 被覆写的方法不能拥有比父类更严格的访问控制权限 |
发生在一个类中 | 发生在继承类中 |
11.super关键字
使用super可以从子类中调用父类的方法、属性。super()和this()均需放在构造方法内第一行,因此与this不能同时出现,main方法不能使用this和super。
12.final关键字
1).使用final声明的类不能有子类
2).使用final声明的方法不能被子类所覆写
3).使用final声明的变量即为常量,不可修改
13.抽象类和接口
●抽象类的定义格式
●抽象类的定义格式 abstract class 抽象类名称{ 属性 ; 访问权限 返回值类型 方法名称(参数){ // 普通方法 [return 返回值] ; } 访问权限 abstract 返回值类型 方法名称(参数) ; // 抽象方法 // 在抽象方法中是没有方法体的 }
接口:接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。接口中的抽象方法必须定义成public访问权限,这是不可改变的。接口要使用也必须通过子类,子类通过implements关键字实现接口。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
接口的定义:
interface 接口名称{ 全局常量; 抽象方法; }
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
对象的多态性
(1)方法的重载和覆写。
(2)对象的多态性:1.向上转型:子类对象——》父类对象。2.向下转型:父类对象——》子类对象。
向上转型:使用父类对象接收子类实例(自动完成),生了向上转型,是父类对象,然后去调用那些父类中的方法,会发现,被调用的依然是子类中覆写过的方法,如果没有覆写过这些方法,则才会调用父类中的方法,调用子类独有的方法和属性就会报错了,
向下转型:使用子类对象接收父类对象,就是将父类对象变为子类对象(需要强制转型),在进行向下转型时,必须先进行向上转型,否则会出现类型转换异常(ClassCastException)。
14.抽象类与接口的关系
序号 |
区别点 |
抽象类 |
接口 |
1 |
定义 |
包含一个抽象方法的类 |
抽象方法和全局常量的集合、 |
2 |
组成 |
构造方法、抽象方法、普通方法、常量、变量 |
常量、抽象方法 |
3 |
使用 |
子类继承抽象类 |
子类实现接口 |
4 |
关系 |
抽象类可以实现多个接口 |
接口不能继承抽象类,但允许继承多个接口 |
5 |
常见设计模式 |
模板设计 |
工厂设计、代理设计 |
6 |
对象 |
都通过对象的多态性产生实例化对象 |
|
7 |
局限 |
抽象类有单继承的局限 |
接口没有单继承的局限 |
8 |
实际 |
作为一个模板 |
是作为一个标准或是表示一种能力 |
9 |
选择 |
如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限 |
|
10 |
特殊 |
一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类 |
15.异常
try{
被检测的代码
可能出现异常的代码
}catch(异常类名 变量){
异常的处理方式
循环,判断,调用方法,变量
}finally{
必须要执行的代码
}
Exception在程序中必须使用try catch进行处理,RuntimeException可以不使用try catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。Exception:一般表示的是程序中出现的问题,可以直接使用try…catch处理。Error:一般指的是JVM错误,程序中无法处理。
异常中的关键字:throw 在方法的内部,抛出异常对象,throws用于方法的声明上,表名此方法可能出现异常请调用者处理,throws 后面必须写异常类的类名。
16.多线程
Java 提供了三种创建线程的方法:
- 通过实现 Runnable 接口;
为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:public void run()
- 通过继承 Thread 类本身;
创建一个新的类,该类继承 Thread 类,然后创建一个该类的实例。继承类必须重写 run() 方法,必须调用 start() 方法才能执行。
- 通过 Callable 和 Future 创建线程
实现Runnable接口可以实现资源共享而继承Thread类不能资源共享,也就是实现Runnable接口是多个线程共同完成一个任务,继承Thread类是一个是多个线程分别完成自己的任务。
使用同步解决问题:
synchronized 方法返回值 方法名称(参数列表){ //方法体 }
17.java IO
1.使用File操作文件
使用File类可以进行创建或删除文件等常用操作
File.pathSeparator表示“;”,File.Separator表示“\"。createNewFile()方法创建文件,mkdir()方法创建文件夹。
18.字节流和字符流
1.字节流:
字节输出流:OutputStream
OutputStream类的常用方法
序号 |
方法或常量 |
类型 |
描述 |
1 |
public void close()throws IOException |
普通 |
关闭输出流 |
2 |
public void flush()throws IOException |
普通 |
刷新缓冲区 |
3 |
public void write(byte[] b)throws IOException |
普通 |
将一个byte数组写入数据流 |
4 |
public void write(byte[] b,int off,int len)throws IOException |
普通 |
将一个指定范围的byte数组写入数据流 |
5 |
public abstract void write(int b)throws IOException |
普通 |
将一个字节数据写入数据流 |
字节输入流:IntputStream
IntputStream类的常用方法
序号 |
方法或常量 |
类型 |
描述 |
1 |
public int available() throws IOException |
普通 |
可以取得输入文件的大小 |
2 |
public void close()throws IOException |
普通 |
关闭输入流 |
3 |
public abstract int read()throws IOException |
普通 |
读取内容,以数字的方式读取 |
4 |
public int read(byte[] b)throws IOException |
普通 |
将内容读到byte数组之中,同时返回读入的个数 |
2.字符流:
字符输出流:Write
Write类的常用方法
序号 |
方法或常量 |
类型 |
描述 |
1 |
public abstract void close()throws IOException |
普通 |
关闭输出流 |
2 |
public void write(String str)throws IOException |
普通 |
将字符串输出 |
3 |
public void write(char[] cbuf)throws IOException |
普通 |
将字符数组输出 |
4 |
public abstract void flush()throws IOException |
普通 |
强制性清除缓存 |
Reader类的常用方法
字符输入流:Reader
序号 |
方法或常量 |
类型 |
描述 |
1 |
public abstract void close()throws IOException |
普通 |
关闭输出流 |
2 |
public void read()throws IOException |
普通 |
读取单个字符 |
3 |
public void read(char[] cbuf)throws IOException |
普通 |
将内容读到字符数组之中,返回读入的长度 |
3.字节流与字符流的区别
- 字符输入:字节(磁盘)–> 自动转换为 –>字符(内存);
- 字符输出:字符(内存)–> 自动转换为–>字节(磁盘);
在利用字符流输出的时候,所有的内容实际上都只是输出到了缓冲区中(内存)。在使用close()方法关闭的时候会将我们缓冲区的数据进行输出,如果没有关闭,那么就将无法进行输出,此时可以利用flush()方法进行强制的输出。
19.容器和事件处理
1.JPanel
可以将多个组件加入到JPanel中以实现复杂的排列,一个界面只可以有一个JFrame窗体组件,但是可以有多个JPanel面板组件,而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用,达到较为复杂的布局效果。
2.JSplitPane
JSplitPane用来将窗口分割成两个部分。JSplitPane提供两个常数让你设置到底是要垂直分割还是水平分割。这两个常数分别是:HORIZONTAL_SPIT,VERTICAL_SPLIT
3.JTabbedPane
JTabbedPane创建的选项卡可以通过单击标题或者图标在选项卡之间进行切换。
4.JScrollPane
主要功能是为显示的内容加入水平滚动条。
文本组件:
单行文本输入框:JTextField
密码文本输入框:JPasswordField
多文本输入组件:JTextArea
20.监听适配器
监听接口中有很多抽象方法,在实现接口的时候,需要重写所有的方法,但经常只会用到其中的一个或两个,这无疑是一种多余。于是出于简化的目的,每个还有多个方法的的监听器接口都配有一个适配器类,这个类实现了接口中的所有方法,但是每个方法没有做任何事情。通过继承适配器类,重写其中的需要使用的方法,不必重写全部的方法,简单方便。
21.JDBC
一、JDBC-ODBC桥
JDBC-ODBC 桥 是sun公司提供的,这种类型的驱动实际是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码。
二、本地API驱动
本地API驱动直接把JDBC调用转变为数据库的标准调用再去访问数据库。
三、网络驱动
JDBC先把对数局库的访问请求传递给网 络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器。
四、本地协议驱动
这种驱动直接把JDBC调用转换为符合相关数据库系统规范的请求。
22.数据库
1).加载数据库驱动程序
1 加载Oracle数据库驱动 Class.forName("oracle.jdbc.driver.OracleDriver");
2 加载SQL Server数据库驱动 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
3 加载MySQL 数据库驱动 Class.forName("com.mysql.jdbc.Driver");
2).连接数据库
DriverManager类的常用方法
序号 |
方 法 |
类型 |
描述 |
1 |
public static Connection getConnection(String url) throws SQLException |
普通 |
通过连接地址连接数据库 |
2 |
public static Connection getConnection(String url,String user,String password) throws SQLException |
普通 |
通过连接地址连接数据库, |
个人总结:
这学期学习java刚开始由于有上学期学习c语言的基础感觉还不错,一些题目的代码和c语言差不多,再加上老师讲的比较透彻,学起来还算轻松。但是学到后面类和方法比较多,很容易搞混,需要多去写代码才能发现一些类和方法之间的区别,例如抽象类和接口在实现时感觉代码差不多,所以需要多多练习。当学到图形界面时,让我更直观的看到了写代码,写程序在日常生活中的作用,许多复杂的程序都是通过一行一行的代码实现的,而图形界面则是我们对一个程序的直接的感受和互动,学了这里更容易让我们理解程序运行原理,也会激发学习的兴趣。后面又学习了数据库之后,与前面联系起来就可以实现一个简单的登录操作程序了。所以这学期学完后还是感觉学到了很多东西,期待下一学期的学习!