课程总结
2019年Java学习课程总结
一丶java基础语法
1、java数据类型
基本数据类型:byte\short\int\long\double\float\boolean\char
引用数据类型:各种java类、接口、数组
注意:为了迎合java一切都是对象的理念,给八大基本数据类型都提供了相应的“包装类”,即:Byte\Short\Integer\Long\Double\Float\Boolean\Char
装箱:术语,将基本数据类型变成包装类型,如:int a = 10, Integer b=a;
拆箱:术语,将包装类型转为基本数据类型, 如:Integer a = 10,int b = a;
一个字节=8位
2、条件分支语句
If语句
If(条件表达式){
若条件表达式为真,则{}中的代码会得到执行
}
If else语句
If(条件表达式){
代码1:如表达式的结果为真,则代码1得到执行,否则执行代码2
}else{
代码2
}
If else if语句
判定条件类似于if else语句
Switch语句
Switch(表达式){
Case 表达式值1:
代码1
Break;
Case 表达式值2;
代码2
Break;
}
注意:条件表达式,即表达式的值只有两个结果,true和false
3、循环语句
Do_while 循环:不管条件是真还是假,循环总会执行一次
Do{
代码1
}while(条件表达式){
代码2
}
While循环:
只要条件表达式为真,则循环开始,循环执行代码1,遍历结果集常用、TCP服务端监听客户端链接
While(条件表达式){
代码1
}
普通for循环
普通for循环三要素:
初始化变量、条件表达式、迭代,三个要素以“;”间隔,普通for循环中,这是三个要素都可以省略不写,但两个“;”必须保留。
For(int i=0; i<10; i++){
代码1:循环体
}
4、运算符
算术运算符
即:+ - * / %
逻辑运算符
即:> < >= <= != ==
条件运算符
即:&(与) |(或) !(非)
注意短路与 && 和 短路或|| ,效率高于长路
自增自减运算符
++y:现加1,然后在把加1后的y参与运算,即:先加后运
Y++:先将原来的y参与运算,然后在将y加1,即:先运后加
自减同上!
注意:还有一些效率较高的运算符 += -= *= /= %=,如:a+=b,等价于a=a+b
二、面向对象
1、面向对象的三大基本特征
封装、继承、多态
2、变量的概念
作用:保存各种数据
1、类型:
全局变量:定义在类中的变量,称之为全局变量
Public class User{
Private int age; //全局变量
}
局部变量: 定义在方法中、各种循环中的变量称之为局部变量
Public class User{
//方法
Public void info(int age){ //age为局部变量
}
}
作用域:
作用域即变量的作用范围:
全局变量的作用域最大:覆盖整个类即本类的各种方法中,都可以使用该变量
局部变量的作用域最小:在方法重定义局部变量,该变量只能在本方法重使用
变量的使用:
变量的使用包含变量的声明和赋值,一般,声明和赋值同时完成,如int a =10
3、类
类是java程序最小的组成单元 (C语言等面向过程的变成语言,最小程序单元是函数)
类的作用:
类是产生对象的模板,类是同类对象的高度抽象,类是一种引用数据类型
类的定义:
使用class关键字
类的分类:
普通类:常用
抽象类:abstract关键字
内部类:少见
Final类:比如String类,不能派生子类
抽象类:
使用abstract关键字修饰的类,抽象类最大的特点:
a、有构造方法,但不能创建对象
b、可以包含抽象方法(只有方法定义,没有方法体的方法)
//抽象类
Public abstract class Shape{
Public abstract info(); //抽象方法
}
c、若一个类中包含抽象方法,则该类必须被定义成抽象类
d、抽象类的目的只有一个,被子类继承
类的成员:
成员变量(全局变量、实例变量)
每一个属于该类的对象,都包含该成员变量
成员方法(实例方法)
每一个属于该类的对象,都包含该成员方法
构造方法(构造器、构造函数)
初始化成员变量,创建类的对象
代码块(普通代码块、静态代码块)
完成类似于构造方法的初始化动作
常量:
使用final关键字修饰的变量,称之为:常量,常量必须显示的初始化,并且
初始化之后不能更改值。如:double final pi=3.14
类变量(静态变量):
使用static 关键字修饰的变量,称之为:类变量,又称:静态变量,静态变量属于类级别,可以直接使用类名访问,不需要创建对象即可访问,如:User.age
4、方法(函数)
-
方法的概念:
在类中,用于处理数据的成员,方法是类中最重要的成员之一。
方法的定义:
定义方法,必须有的要素有:返回值、方法名(参数),这三个要素称之为方法签名,如: void info(){
//方法体
} -
方法的分类:
(1)普通方法:
即一般的成员方法,如: public void method(int age){
}
(2)抽象方法:
即使用abstract关键字修饰的方法,如:public abstract info();
(3)静态方法:
即使用static关键字修饰的方法,静态方法与静态变量一样,都属于类级别,调用静态方法直接使用类名即可,不需要创建对象,如:User.info()
方法的返回值:
所谓返回值,即通过方法的一系列处理或计算之后,得出的结果,因为方法的主要功能就是计算和处理各种数据,若:方法的设计者,设计方法时,需要该方法计算数据同时要将计算结果告诉(返回)给方法的调用者,则,该方法一般需要设置返回值,反之,若方法的设计者设计方法时,只希望该方法完成计算和数据处理工作,而不需要告诉(返回)结果给方法调用者,则该方法一般不需要设置返回值。
返回值的类型:
返回值可以是java所支持的一切数据类型(基本数据类型和引用数据类型)
若没有返回值,则使用void关键字代替
方法的命名:
方法代表功能,一般使用动词作为方法名,需要符合java命名规范
方法的参数列表:
如果方法处理的数据是动态的,来自于方法外部,则可以通过参数列表传入
方法内部进行处理,否则,可以不需要设置参数列表。
方法的重载
“两同一不同”
同一个类中,相同的方法名,但参数列表不同(参数的个数、顺序、类型)
方法的重写:
“两同两小一大”
方法名相同、参数列表相同、返回值更小、抛出的一场类型更小,访问权限要更大。
5、面向对象之:封装
封装的概念:
隐藏该隐藏的,暴露该暴露的,封装包含两层概念:隐藏和封装。
封装的实现:
通过四个访问控制符,实现不同程度的访问权限控制
Private
权限最严格,可以修饰变量和方法,被private修饰的变量和方法,只能
在本类中访问
Protected
权限比private宽松,可以修饰变量和方法,可以在本类及不同包中的子类访问,一般protected修饰的方法,都希望被子类重写。
默认
没有任何访问控制符,可以在本类及不同包的非子类访问
Public
权限最宽松,可以修饰变量和方法,可以被本类及不同包中的子类、非子类访问。
一般:
严格意义上的封装,所有的属性都应该使用private修饰隐藏在本类中,
不允许外界直接修改或直接访问,与此同时,为了方便外界访问该类中的信息,需要给这些被隐藏的属性提供相应的getter和setter方法,此即为:隐藏和暴露
6、面向对象之:继承
继承的实现:
Java继承,通过extends关键字,子类继承父类。
继承的作用:
子类继承父类,可以获取父类中除private修饰的所有属性和所有方法。
注意:子类并不能获取到父类的构造方法,但可以在子类构造方法中通过super
关键字调用父类构造方法,且创建子类对象时,必须先调用父类构造方法。
继承的特点:
Java只支持“单继承”,一个子类只允许有一个直接父类,但允许子类有多个
间接父类。
7、面向对象之:接口
接口的概念:
接口是比抽象类更加抽象的引用类型
接口的定义
定义接口使用interface关键字,接口跟类是同级别的
接口的成员:
公共静态常量:即使用public static final 修饰的变量,修饰符可以不用谢,接口会默认添加
公共抽象方法:
即使用public abstract 修饰的方法,修饰符也不需要显示添加。
注意:接口没有构造方法!
接口的使用:
为了解决java单继承带来的不足,一个类继承了父类之后,不能再有其他直接父类,从一定程度上限制了类的功能扩展,而接口可以多实现,接口的使用就在于被实现,一个接口可以继承多个父接口,多个父接口之间用英文逗号分隔;一个类可以继承一个父类,还可以实现多个接口,接口之间同样使用逗号分隔。
注意:若一个类既需要继承父类,也需要实现接口,则继承在前,实现在后
实现接口使用“implements”关键字,一个类实现某个接口,若接口中定义了抽象方法,则该实现类必须强制实现(重写)抽象方法。
类A、B接口 C D E
A extends B implements C,D,E
在学习SSM框架以及真实的企业项目开发时,通常建议“面向接口编程”。
8、面向对象之:多态
1.多态的概念:
当编译时类型(声明对象的类型)和运行时类型(真实的对象类型)不一致时,产生多态,如:Animal a = new Dog();
2.多态的前提
有继承(有实现),有重写,只有在子类继承父类,或者实现类实现接口时,
方能产生多态,如:上述的Dog类,要么是Animal类的子类,要么是Animal接口的实现类,否则无法产生多态。
在如:List list = new ArrayList();
9、内存分析
栈内存:保存各种变量
堆内存:保存各种对象
如:Person p = new Person();
首先,创建了一个Person类型的变量p,保存在栈内存中
然后,创建一个Person对象,保存在堆内存中,由于堆内存中的数据无法直接获取,故,将堆内存中的该对象的内存地址,赋值给变量p,这个过程称之为“引用”
三、 异常机制
异常的处理机制
通过五个关键字组合使用
Try:try中编写的是可能出现的异常的代码
Catch:捕获并处理异常情况
Finally:编写由于异常导致程序终端,某些物理资源及时关闭
Throws:声明抛出异常
Throw:抛出异常
一般而言,异常处理建议当机立断,不要把异常抛给JVM
四丶数组
数组的概念
用于存储多个数据的结构,数组跟类和接口一样,数组也是引用数据类型
数组的定义
动态初始化
只确定数组的长度,数组的元素不指定,如int[] a = new int [10];
静态初始化
即确定数组的长度,也确定数组的元素,如int[] a =new int[] {1,2,3,4,5};
使用时机:当元素确定时使用静态初始化,当元素值的来源是通过程序动态获取的,则使用动态初始化。
数组的访问:
数组具有索引下标,可以通过下标访问数组的元素,如: a[1]
数组工具类:
Arrays类,通过数组工具类,可以给数组排序、查询最大值、最小值等操作。
集合的元素类型:
通常,定义数组,一般定义的时int 、String、double、等基本数据类型的数 组,实际上,数组的元素类型可以是任何Java所支持的数据类型,如:
Student[] students= new Student[10];
User[] users= new User[5];
String[] strs= new String[19]
五丶JavaIO
IO的四个基类
inputStream:字节输入流基类
outputStream:字节输出流基类
Reader:字符输入流基类
Writer字符输出流基类
流的分类
按流的方向
输出流
输入流
按流的单位:
字节流
字符流
按流的功能:
节点流
包装流
常用的流:
文件流
文件输入流:FileInputStream FileReader
文件输出流:FileOutputStream FileWriter
文件流用于读写文件,包括二进制文件和文本文件(能用记事本打开并看到内容的文件称之为文本文件,若记事本打开是乱码,则是二进制文件)
文件的常用方法:
Read方法:从输入流中读取数据
Write方法:向输出流中写出数据
打印流:
字节打印流:PrintStream
字符打印流:PrintWriter
打印流常用方法:
Print方法:写出数据,不换行
Println方法:写出数据换行
注意:打印流没有输入流,只有输出流
缓冲流:
字节缓冲输入流:BufferedInputStream BufferedReader
字节缓冲输出流:BufferedOutputStream BufferedWriter
缓冲流属于包装类,创建一个缓冲对象需要在构造方法中传入另一个已经存在的流对象,此乃包装之意;
缓冲流效率高,速度快,常用方法:
Read和write方法
Readline方法:一次性读取一行数据
对象流:
对象输入流:ObjectInputStream
对象输出流:ObjectOutputStream
对象流的功能:
将数据(对象)写入磁盘、网络,将对象从磁盘、网络恢复。
序列化:
在Java程序中,所有程序中通过new关键字创建出来的对象,都保存在内存当中,当程序停止运行或内存回收后,这些对象,将不复存在,下一次要使用这些对象必须重新创建,极大的耗费时间和JVM效率,为此,可以将这些对象从内存中永久保存到磁盘中,这个过程称之为“序列化”。
通过对象输入流实现。
注意:对象要序列化,则高对象所对应的类必须实现“Serializable”序列化接口,否则会引发异常。
对象常用方法:
ReadObject()方法,
WroteObject(对象)方法
六丶多线程
程序的概念
程序是由一组特定的计算机语言编写的,以文件的形式组成的文件集合,程序没有运行时,这些文件就保存在磁盘中,程序得到运行时,这些文件会动态加载到内存中,从而消耗CPU资源和内存资源。
进程的概念
进程时运行中的程序的执行流, 一个程序运行时可以有一个或者多个进程同时运行,进程之间通讯困难,同一程序的多个进程之间各自占用cpu资源。
并发:
同一时刻,多个进程抢占CPU,宏观上,进程之间是同时执行,但微观上看,这进程时分时执行的,谁抢到CPU谁执行,轮换时间20ms左右
并行:
同一时刻,多线程之间不管是微观还是宏观,他们是真正意义上的同时执行
线程的概念
线程是进程中的任务流,一个进程有一个线程,也可以同时有多个线程,多个线程之间共同分享该进程所占用的CPU和内存资源,线程之间的调度和轮换由进程负责控制。
Java天生就支持多线程。
线程的实现
Java实现多线程,有四种方式:
1)继承Thread类,重写run方法
2)实现Runnable接口,重写run方法
3)继承TimeTask类,使用Timer类,重写run方法
4)实现Callable接口,重写run方法
Run方法是线程执行体,也即线程所需要完成的任务,程序不能主动调用run方法,线程会自动调用run方法,执行其中的代码;若主动调用run方法,则不再具备多线程的能力。
线程的生命周期
新建状态(new)
线程对象通过new关键字创建,仅此而已!
可运行状态(runnable)
线程对象调用了start方法,已经启动,随时听候调度,抢占CPU
运行中状态(running)
已经启动完成的线程,获取了CPU资源,正在执行run方法
阻塞状态(block)
正在运行中线程,遇到阻塞操作,如休眠sleep、IO阻塞等,进入阻塞状态
死亡状态(dead)
线程的run方法执行完毕,线程死亡,线程对象被回收。
七丶图形界面
java的图形界面开发中可使用的技术有 AWT 和 Swing两种。AWT是大量使用了Windows的系统函数,Swing则是由Java来实现的用户界面,它可以在任意系统平台工作。
AWT,是抽象窗口工具包,它中的所有工具类都保存在java.awt包中,此包中的工具类主要分为:
1.组件:Component
2.容器:Container
3.布局管理器:LayoutManager
Java中所有的Swing都保存在javax.swing包中
基本容器:JFrame
使用Swing创建一个窗口,直接使用JFrame类即可。
布局管理器
FlowLayout:流式布局管理器
BorderLayout:将一个窗体的版面划分为东西南北中,可以直接将需要的组件放入这5个区域中。复杂一点就是在这5个区域中放入其他的容器,再在那些容器中使用布局管理器放一些组件。
GridLayout:以表格的形式进行管理,使用此布局管理器时必须设置显示的行数和列数。显示的时候它是行优先,先会保证行。 计算器的操作可以使用此布局管理器。
CardLayout:将一组组彼此重叠地进行布局,就像一张张卡片一样,每次只会展现一个界面,图片的浏览就可以使用此布局管理器,我感觉用手机看小说翻页的时候和这个也是一样的。复杂一点可以在每一个界面放置容器,再加组件,每个界面都可以是不一样的东西。
绝对定位:使用pulbic void setBounds(int x , int y, int width, int height)来定位一个组件的坐标和大小.
JPanel
在JPanel中可以加入任意组件,然后直接将JPanel容器加入到容器中即可显示,JPanel默认布局管理器为流布局管理器
JSplitPane
功能:分割面板,将一个窗体分为两个子窗体,可以水平可垂直
八丶JDBC
JDBC的概念
数据库如SqlServer、MySQL等都是独立的软件系统,而Java程序是一门独立的编程语言,任一一门编程语言所编写的程序,若离开数据库,则都是没有实际作用的,因此,必须将独立的Java程序和独立的数据库系统建立连接,
在Java中,这种连接技术称之为“JDBC”java database connection.
JDBC的技术组成
1)数据库连接对象
Connection接口:通过
DriverManager.getConnection(数据库的URL,username, password)获取
2)语句对象
用于发送sql语句给数据库系统,常用的语句对象为预编译的语句对象,
即:PreparedStatement,通过
Connection.preparedDtatement(string sql )方式获取。
常用的方法:
SetXXX方法:给占位符赋值,占位符从1开始
ExequteQuery方法:执行查询的sql语句,获取结果集对象
ExequteUpdate方法:执行增删改的sql语句,返回受影响的记录条数。
3)结果集对象
ResultSet接口,只有执行查询的sql语句,才能返回结果集。
常用方法:
GetXXX方法:获取结果集中特定的列的、特定的行的值
4)数据库连接池
比如C3P0连接池
连接池负责维护多个数据库连接对象,即多个Connection对象,当需要使用时,从连接池中获取一个连接对象使用即可,不在需要每一次都创建,用完之后返回连接池即可,不需要每一次与都输入URL、用户名等信息。
本学期学的东西很多,很新鲜。但是还存在很多的不足,学的不够精,学的不够广也不够多,还有更多更难的知识等着我们去学习,不能够放松了对java的学习。