这个学期已经要结束了,Java课程学习中认真听课是很重要的,但是我在学习过程中其实学习态度不好,在老师提醒下我改正学习态度,认真听课,认真学习和复习。
相较于上学期的C语言,面向对象这一特性让我学起来轻松了不少,李津老师讲课逻辑清晰,有条不紊,易懂又不乏味,非常的关心学生的学习情况。
养成添加注释的习惯。
(1)有助于保持一致性
(2)有助于理解
(3)帮助修补程序或快速修复
(4)有助于加快开发过程
(5)有助于提高协作效率
Java的重要知识,需要加深印象
基础知识
1、.java中源文件的扩展名为.java,之后通过编译.java的文件生成一个.class文件,之后才能在Java环境中运行。
2、JVM是在一台计算机上由软件或硬件模拟的计算机,Java中所有程序都在此模拟的计算机上运行。
3、类名称要求每个单词的首字母都要大写。
4、使用了public class声明定义类的话,文件名必须与类名称保持一致;而使用class定义的类,文件名称可以与类名称不同,但是
生成的.class文件的名称就是class定义的类的名称,而且一个Java文件可以产生多个class文件。
5、主方法【main()】是一切程序的起点,把主方法所在的类称为主类,并且主类使必须用public class声明。
6、public static void main (String args[])是程序的主方法,所有的程序都会以此方法为起点并向下运行。
7、System.out.println起输出作用,是直接将“()”里的内容进行输出,当有多个值需要输出时,中间可以使用"+"连接。
8、数据类型的转换由低到高发生自动类型转换,反之,则发生强制类型转换。
9、JAVA中的标识符不能以数字开头,也不能是JAVA中的保留关键字。
10、a%b=c,c的正负与被除数保持一致;a++会先执行整个语句 后再将a的值加1,而++a则先把b的值加1后,再执行整个语句。
11、类:定义出一个基本的模板,代表着一个共性,类是由属性和方法组成的。对象:对每一个体的详细描述。
12、所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存中,必须使用new关键字才能开辟堆内存空间;如果一个对象要被使用,则对象必须被实例化。 实例化对象:对象名称 = new 类名()。
13、程序封装使用private,而被封装了的对象要使用setter和getter去设置和访问。
this关键字
在课堂上说出了他的四种用处,以及它不能和静态属性的方法同时使用。
讲解了静态属性怎么定义,以及可以直接调用类方法的主要用处。
构造方法
对于构造方法:要给予循环方法一个出口,而且强调有参和无参的区别,静态能调用不静态的,非静态不能调用静态方法。
1、String类
实例化String类对象有两种方式
1.直接为string类赋值。
2.调用String类中的构造方法进行实例化。
两种实例化方法的区别
第一种赋值的弊端就是所有的对象共用一个地址,而第二个方法开辟了多个空间
2、等价符号==比较的是对象的地址,
equals()方法比较的则是对象的内容。
3、String类中的字符串内容不可修改。
4、String类中的常用方法
继承:1、在Java类中只允许单一继承,即一个子类只可以继承一个父类,且子类将继承父类的非私有属性和方法。
2、父类与子类只能一对一,即一个父类下面只有一个子类,但是那个子类可以作为父类进行下一次的继承。
3、方法的重载与复写:在重载中,方法名称相同,参数的类型或者个数不同,而覆盖都是相同的。覆盖只有发生在父类与子类之间,而重载可以发生在同一类中。
super()方法
(1)super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
(2)super()和this()均需放在构造方法内第一行,所以super()与this不能同时出现。
接口
接口的应用
使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:
[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口;
当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而没有被实现;
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口的作用
(1)通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。
(2)通过接口可以指明多个类需要实现的方法。
(3)通过接口可以了解对象的交互界面,而不需了解对象所对应的类。
注意的点:
类描述了一个实体,包括实体的状态,也包括实体可能发出的动作。
接口定义了一个实体可能发出的动作。但是只是定义了这些动作的原型,没有实现,也没有任何状态信息。
instanceof关键字
Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class;
注意事项:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译。
抽象类与接口的关系
包装类
包装类分为两种类型:
1、对象型(Object的直接子类):Boolean、Character(char);
2、数值型(Number的直接子类): Byte、Double、Short、Long、Integer(int)、Float;
(2)字符串与基本数据类型相互转换
字符串转换为基本数据类型
1.、String变为int 类型(Integer类):
public static int parseInt(String s) throwsNumberFormatException
2、 String变为double类型(Double类):
public static double parseDouble(String s) throwsNumberFormatException
3、String变为Boolean类型(Boolean类):
public static boolean parseBoolean(String
(3)基本数据类型转换为字符串
任何数据类型使用了"+"连接空白字符串就变为了字符串类型。
使用String类中提供的valueOf()方法,此方法不产生垃圾。
异常
所有的异常都是从Throwable继承而来的。
1、运行时异常(unchecked exception):继承自java.lang. RuntimeException类
常见的:
ClassCastException(类型转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
IO操作的BufferOverflowException异常
网络上搜索到的!!
2、非运行时异常(checked exception):继承自java.lang.Exception类
常见的:
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
网络上搜索到的!!
Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception。
处理(用try ..catch..finally)异常类名不会的话可以用API。
而RuntimeExcepetion处理可以随意。其他的Excepetion必须处理。
多线程
多线程是实现并发机制的一种有效手段。
Java中实现多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,1.5之后还有一个Callable接口
一个类继承Thread类就称这个类为多线程类,在其中必须覆写run()方法。这个方法为线程的主体。
要正确的启动线程,是不能直接调用run()方法,应该调用从Thread类继承而来的start()方法。
虽然调用的是start()方法,但实际调用的是run()方法的主体。
并且只能调用一次start()方法。
Runnable接口中只提供一个run()方法。
线程操作我们可以通过Thread类和Runnable类来实现
Thread类实现了Runnable接口。
在Thread类中,有一些比较关键的属性,比如name是表示Thread的名字,可以通过Thread类的构造器中的参数来指定线程名字,priority表示线程的优先级(最大值为10,最小值为1,默认值为5),daemon表示线程是否是守护线程,target表示要执行的任务。
线程运行状态的几个方法:
1)start方法
start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。
2)run方法
run()方法是不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意,继承Thread类必须重写run方法,在run方法中定义具体要执行的任务。
3)sleep方法
sleep方法有两个重载版本!!!
(4)线程的礼让(Thread.yield())方法
线程的同步方法:在方法声明上加上synchronized
public synchronized void method(){
可能会产生线程安全问题的代码
}
同步方法中的锁对象是 this(即调用者对象)
静态同步方法: 在方法声明上加上static synchronized
public static synchronized void method(){
可能会产生线程安全问题的代码
}
静态同步方法中的锁对象是 类名.class(因为在加载类文件的时候,静态同步方法由于是静态的也被加载进内存了,类名.class的加载优先级高于静态方法)
同步代码块:在需要同步的代码外面包上一个synchronized
(Object o){
可能会产生线程安全问题的代码
}
同步代码块中的所对象可以是任意对象!!!
线程的死锁
同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。
file类
file类的构造方法:
public Flie(String pathname) -->实例化Flie类的时候,必须设置好路径。
如:Flie f = new Flie("d:\\test.txt");
(1)Windows中使用反斜杠表示目录的分隔符。
(2) Linux中使用正斜杠表示目录的分隔符。
Flie类主要方法:
字节流与字符流
Java IO的操作流程:
(1)使用Flle类打开一个文件。
(2)通过字节流和字符流的子类指定输出的位置。
(3)进行读和写的操作。
(4)关闭输入和输出。
字节流
字节输出流:OUtputStream
OutputStream是一个抽象类,因此需要通过子类FileOutputStream实例化对象,才能够使用它。
常用方法:
public void write(int b) throws IOException:
一次写一个字节 b- 要写入的字节。
public void write(byte[] b) throws IOException:
一次写一个字节数组
public void write(byte[] b, int off,int len) throws IOException:
一次写一部分字节数组
public void close()throws IOException
关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。
字节输入流:
它与OutputStream一样,需要通过子类FlieInputStream实例化对象。
常用方法:
字符流
字符输出流:Writer
它也是一个抽象类,需要通过子类FlieWriter实例化对象。
常用方法:
字符输入流:Reader
同样是一个抽象类,需要通过子类FlieReader实例化对象。
常用方法:
public int read() throws IOException
读取单个字符。
作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1
public int read(char[] cbuf) throws IOException
一次读取一个字节数组
cbuf - 目标缓冲区
读取的字符数,如果已到达流的末尾,则返回 -1
public void close() throws IOException
关闭该流并释放与之关联的所有资源。
public String readLine() throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
容器
(1)JPanel:使用JPanel完成各种复杂的界面显示,在其中可以加入任意的组件。
JPanel:(在JPanel中可以加入任意的组件,然后直接将JPanel容器加入到JFrame容器中)。
JFrame frame = new JFrame("")
JPanel pan = new JPanel();
pan.add(new JLabel(" "));
frame.add(pan);
(2)JSplitPane :主要功能是分割面板,可以将一个窗体分为两个子窗体,可以水平排列也可以是垂直排列。
JSplitPane(分割面板,将一个窗体分割为两个子窗体)。
public static final int HORIZONTAL_SPLIT //水平分割
public static final int VERTICAL_SPLIT //垂直分割
public JSplitPane(int newOrientation) //创建对象,并指明分割方式
publci void setDividerSize(int newSize) //设置分割条大小
(3)JTabbedPane:在一个面板上设置多个选项卡用户选择。
JTabbedPane(选项卡,一个面板设置多个选项卡)。
static final int TOP 、BOTTOM 、LEFT 、RIGHT //表示指示框位置,即顶部、底部、左部、右部
public JTabbedPane(int tabPlacement) //创建对象,并指定选项卡布局
public void addTab(String title,Icon icon,Component component,String tip) //添加一个有标题,有图标,有提示信息的组件。(可以减少参数来适应你的需求)
(4)JScrollPane:Swing中JScrollPane的主要功能就是为显示的内容加上水平滚动条。
JScrollPane(添加滚动条)。
static final int HORIZONTAL/VERTICAL_SCROLLBAR_ALWAYS //始终显示水平/垂直滚动条
static final int HORIZONTAL/VERTICAL_SCROLLBAR_NEVER //任何情况下都不显示水平/垂直滚动条
static final int HORIZONTAL/VERTICAL_SCROLLBAR_AS_NEEDED //根据自身需要显示水平/垂直滚动条
(5)JDesktopPane与JInternaIFrame:JDesktopPane规定了一个父窗体的基本形式,而JInternaIFrame规定了各个子窗体,JInternaIFrame需要加入到JDesktopPane中。
事件处理与事件监听器
(1)事件和监听器
事件监听器机制是观察者模式的一种,通过把事件源和事件处理流程以监听器的方法隔离开来,减小了主流程与被触发事件的执行流程间的耦合,便于代码的维护和对事件处理流程的扩展。
在事件监听机制中,涉及到三个角色:事件、发布者和监听器
事件:在事件源和事件监听器之间传递信息的对象实体。
发布者:在事件发生后,负责把事件发布到监听者的对象。
监听者:监听事件,并进行事件处理或转发的对象。
Java中提供了事件监听器实现的框架,使用Java中的事件监听器,需要熟悉以下几个类或接口:
1. EventObject:事件的基类,在Java中自定义事件时需要继承的基类,其定义了事件源——Object类型的属性,可以把发生事件所在的类实例的引用传递过来,以便于在事件处理流程中使用(如果有使用要求的话)。在自定义的事件中,还可以定义自己应用所需的其他属性。
2. EventListener:自定义事件监听器必须实现的接口,没有具体方法,只起到标识作用
(2)窗体事件(WindowListener)
void windowActivated/windowDeactivated(WindowEvent e) //将窗口变为活动/不活动窗口时触发
void windowClosed/Closing/Iconified(WindoowEvent e) //当窗口被关闭时/正在关闭/最小化时触发
viod windowDeiconified(WindowEvent e) //窗口从最小化恢复到正常状态时触发
viod windowOpened(WindowEvent e) //窗口打开时触发
(3)监听适配器Adapter:用户继承该类后就可以根据自己的需要来覆写方法,不会占用更多无用的空间。
动作事件及监听处理ActionListener:
处理按钮的动作事件,让按钮变得更加有意义。
void actionPerFormed(ActionEvent e) //发生操作时调用
菜单组件
JMenu与JMenuBar
JMenuBar常用方法
JMenu常用方法
JMenuItem类的常用方法
JMenuItem继承AbstractButton类,因此JMenuItem也可以理解为一种特殊的JButton组件,事件处理就可以使用Actionevent事件的监听。
在使用记事本或者Word时,可以通过文件选择框选择要打开或保存的文件,在Swing中可以使用JFileChooser组件实现此功能。
JFileChooser类常用方法
文件选择框的三种返回状态
public static final int APPROVE_OPTION //选择确定后返回该值
public static final int CANCEL_OPTION //选择取消后返回该值
public static final int ERROR_OPTION //发生错误后返回该值
JDBC
JDBC的操作上课的时候由于要讲的太多,不能详细的说明
在https://www.cnblogs.com/erbing/p/5805727.html此链接的博客上学习。