第一章 java概述
java 语言的特点
- 语法简单,功能强大,安全可靠
- 与平台无关
- 解释编译两种运行方法
- 多线程
- 动态执行兼有丰富的API文档及类库
设置环境变量
- JAVA_HOME: jdk安装路径
- CLASSPATH
- Path
Java 程序的两种形式
- Java程序(Java Application)
- Java小应用程序(Java Applet)
编译与运行
- 编译:javac [选项] 源文件名
- 运行: java 文件类名
IDE
- Eclipse
- NetBeans
面像对象技术
- 面像对象的分析(OOA)
- 面像对象的设计(OOD)
- 面像对象的程序设计(OOP)
面像对象三大特性:封装、继承、多态
第二章 数据和表达式
注释
- // 在一行内的注释
- /一行或多行注释/
- /* * 文档注释 * */
关键字
标识符
- 标识符是由字母、数字、下划线(_)或美元符($)组成的字符串
- 数字不能最为标识符开头
- 标识符区分大小写。长度没有限制
Java 编程风格
- 类名或接口名: 多为名称,含有大小写,每个单词的首字母大写。
- 方法名: 多是动词,含有大小写,首字母小写,其余各单词的首字母大写。
- 常量名:全为大写字母,单词与单词之间使用下划线。
- 变量名:首字母为小写,后面单词的首字母为大写。
基本数据类型
- 基本数据类型
- 整数类型:byte, short, int, long
- 浮点类型:float, double
- 字符类型:char
- 布尔类型:boolean
- 复合数据类型
- 类类型:class
- 数组
- 接口类型: interface
运算符
- 算数运算符:+,-,*,/,%,++,--
- 关系运算符:>,>=,<,<=,==,!=
- 逻辑运算符:&&,||,!
- 位运算符:-(取反),&,|,^,右移(>>),左移(<<),无符号右移(>>>)
- 扩展赋值运算符:+=,-=,*=,/=,%=
- 条件运算符:?:
- 点运算符: .
- 实例运算符:instanceof
- new运算符: new
- 数组下标运算符: []
自动类型转换
由低到高
byte,short,char,int,long,float,double
第三章 流程控制语句
包语句
package pag1[.pk2.[pk3]]
引入语句
import java.util.*;
赋值语句
=
分支语句
- if 语句:if else
- switch语句:switch case default
循环语句
- for语句
- while语句
- do while语句
跳转语句
- 标号:可以放在任意语言之前,通常与for、while、do while语句配合使用,已发格式为【标号:语句;】
- break语句
- continue语句
简单的输入输出
- Scanner类:常使用read(),readLine()方法读入数据
- NumberFormat类:输出类
- getInstance():返回当前默认语言环境的默认数据格式。
- getCurrenyInstance():返回当前默认语言环境的通用格式。
- getNumberInstance():返回当前默认语言环境的通用数值格式。
- getPercentInstance():返回当前默认语言环境的百分比格式。
- setMaximumFractionDigits(int):设置数值的小数部分允许的最大位数。
- DecimalFormat类:构造方法字符串设置数值的显示格式
异常处理机制
Java的异常采取抛出和捕获的方式处理
异常分类
- Exception:异常总类
- RuntineException:运行时异常
- IOException:输入输出异常
- Error: 错误类
异常处理
- throws:告诉方法的调用者处理异常。
2.try catch finally:在方法内处理异常
公共异常
- ArithmeticException:
- NullPointerException:空指针异常
- NegativeArraySizeException
- ArrayIndexOutOfBoundsException: 数组越界异常
抛出异常
当不能使用合理的方式来解决不正常或意外事件的情形下,才抛出异常
throw 异常对象
第四章 面向对象程序设计
类的定义
修饰符 class 类名 [extends 父类名]{
修饰符 类型 成员变量1;
修饰符 类型 成员方法(参数列表){
方法体
}
……
}
构造方法
构造方法的名字与类名相同,没有返回值,在创建对象实例时用过new运算符自动调用。
对象的创建,初始化
//1. 声明:类名 对象吗;
Date myBirthdatay,yourBirthdat
//2. 初始化:对象名=new 类名 ([参数列表])
myBirthday = new Data()
方法的定义
修饰符 返回值类型 方法名(参数列表){
方法体内容
……
}
重载方法名
方法名称加上方法的参数列表(包括方法中参数的个数、顺序和类型)称为方法签名。方法重载时,方法签名一定不能相同。
修饰符
- public
- proteted
- private
静态变量
static修饰的变量,所有对象共享
静态方法
- 静态方法不能使用非静态变量
- 静态方法不能重写
包装类
第五章 数组和字符串
数组声明
- 定义格式:类型数组名 [];
- java没有静态的数组声明
创建数组
- 静态初始化:声明时赋值
int intArray[ ] = {1,2,3,4}
Double [ ] heights = {4.5, 23.6, 84.124}
- 动态初始化:使用new申请空间,在逐步赋值
类型 数组名[] = new 类型[数组大小];
数组名[0] = new 类型(初值表);
访问数组元素
- 访问格式:数组名[下标]
- 其中,下标的范围是0~length-1。下标可以是整型常数或表达式。
多维数组
//二维数组的定义
类型 数组名[] []
类型[] [] 数组名
类型[] 数组名[]
//二维数组初始化
//静态初始化
int intArray[][] = new {{2,3},{1,5},{3,4}}
//动态初始化:直接分配
类型 数组名[][] = new 类型[数组第一维大小][数组第二维大小];
//动态初始化:按维分配
类型 数组名[][] = new 类型[数组第一维大小][];
数组名[0] = new 类型[数组第二维大小];
数组名[1] = new 类型[数组第二维大小];
字符串声明
- String 类一旦创建,值无法改变
- StringBuffer可变长字符串,可以修改长度
字符串创建
String s1 = new String();
String s1 = "hello world!";
StringBuffer sb1 = new StringBuffer();
字符串的操作
String 和 StringBuffer常用方法
length(): 获取字符串长度
charAt(int index):获取字符串index对应的元素
subString(int beginIndex):从某个位置取子串
replace(char oldChar, char newChar):字符创替换
toLowerCase(): 字符串转小写
toUpperCase():字符串转大写
startsWith(String prefix):判断字符串以什么开头
"==":比较两个字符串的内存地址是否一致
"equals()": 比较两个字符串的数值是否相同
Vector 类
- 可变长存储空间
- 可存储不同类型数据
- Vetor 类只能存储对象
- Vetor 类提供了许多方法来操作对象
Vetor常用方法
- 构造方法: Vetor()
- 添加方法
- addElement(Object obj)
- insertElementAt(Object obj, int index)
- add(int index, Object obj)
- 修改或删除方法
- setElementAt(Object obj, int index)
- removeElement(Object obj)
- 查找方法
- ElementAt():返回指定位置元素
- contains(Object obj):是否包含指定对象
- indexOf(Object obj, int start_index):返回指定位置开始的第一个字串的位置
- lastIndexOf(Object obj, int start_index):返回指定位置开始后的最后一个字串的位置
第六章 继承和多态
is a 关系
- is a : 一般与特殊关系
- has a : 整体与部分关系
extends 关键字
用extends关键字实现通过已有类生成新类,新类叫子类,已有类叫父类。两个类中共性部分放在父类中,两个类中特殊部分放在子类。
//创建新类格式
修饰符 class 子类名 extends 父类名{
类体
}
Object 类
所有类的父类
- getClass() : 获取当前对象所属的类信息。
- toString(): 按字符串对象返回当前对象本身的有关信息。
- equals(Object obj): 比较两个对象是否是同一个对象,是返回true。
单重继承
- java 只支持单继承;
- 多继承是通过接口实现的;
- 构造方法不能被继承,构造方法只能自己编写或没有的时候系统添加的默认的构造方法。
对象转型
父类Employee,子类Manager,向上转型:
//向上转型
Empolyee e = new Manager();
方法覆盖及其规则
子类与父类使用的是相同的方法名及参数列表,但可以执行不同的功能,叫方法覆盖。
- 覆盖方法的允许访问范围不能小于原方法。
- 覆盖方法所抛出的异常不能比原方法更多。
调用父类的构造方法
子类第一条语句:
super(参数列表);
多态
- 静态多态: 同一个类中同名方法
- 动态多态:不同类中同名方法,父类做函数形参,根据实参决定执行哪个对象的方法,完成不同的功能。
接口的定义
//定义格式
[接口修饰符] interfance 接口名 [extends 父接口列表]{
//方法原型或静态常量
……
}
接口的实现
//格式
class 类名 implements 接口{
//接口方法的具体实现
}
第七章 输入输出流
数据流的基本概念
流是一组有顺序的、有起点和终点的数据构成的集合。来完成数据的输入和输出。
Java 的IO包中流被分成不同的层次。
输入数据流(字节流)
InputStram类的常用方法:
- int read()
- int read(byte[] b)
- int read(byte[] b, int off, int len)
- long skip(long n)
- void close()
- int available()
- boolean markSupported()
- void mark(int readlimite)
- void reset()
输出数据流(字节流)
OutStream类的常用方法:
- void write(int b)
- void write(byte b[])
- void write(byte b[], int off, int len)
- void flush()
- void close()
文件数据流
FileInputStream 和 FileOutStream类实时对文件进行读写操作。不支持mark()和reset()方法。
FileInputStream in = new FileInputStream("a.txt");
while (in.available() > 0)
System.out.print(in.read() +"");
in.close();
//例题:文件复制
InputStream in = new FileInputStream("a.txt");
OutputStream = out new FileOutputStream("b.txt");
int len;
while ((len = in.read()) != -1) {
out.write(len);
}
in.close();
out.close();
缓冲数据流
在基础字节流的基础上建立一个缓冲区,来提高字节流处理的效率。
- BufferedInputStream(InputStream in)
- BufferedInputStream(InputStream in, int size)
- BufferedOutputStream(OutputStream out)
- BufferedOutputStream(OutputStream out, int size)
- read()
- write()
- flush()
DataInputStream类数据流
-
DataInputStream输出流:读取基本类型数据的方法
- byte readByte()
- long readByte()
- double readByte()
- boolean readByte()
- String readByte()
- int readByte()
- float readFloat()
-
DataOutputStream输入数据流:写入基本类型数据的方法
- void writeByte(int aByte)
- void writeLong(long aLong)
- void writeDouble(double aDouble)
- void writeBoolean(boolean aBool)
- void writeUFT(String aString)
- void writeInt(int aInt)
- void writeFloat(float aFloat)
对象流
将对象信息写入文件或从文件读取对象信息。
//向文件写入对象流创建
FileOutputStream f = new FileOutputStream("a.txt");
ObjectOutputStream s = new ObjectOutputStream(f);
//从文件读对象流创建
FileInputStream f = new FileInputStream("a.txt");
ObjectInputStream s = new ObjectInputStream(f);
序列化
将对象信息长久保存到文件叫序列化(Serializable),反之叫反序列化
public class Student implements Serializable{
String name;
public Student(String name){
this.name = name;
}
}
//对象流写入文件
Student stu = new Student("LiMing");
FileOutputStream fb = new FileOutputStrean("a.txt");
ObjectOutputStream so = new ObjectOutputStream(fb);
so.writeObject(stu);
so.close();
//读取对象流
FileInputStream fi = new FileInputStream("a.txt");
ObjectInputStream si = new ObjectInputStream(fi);
stu = (Student)si.readObject();
si.close();
基本字符流
InputStreamReader 和 OutputStreamWrite 可以用于不同平台间编码方式的转换。
- InputStreamReader(InputStream in):默认规范。
- InputStreamReader(InputStream in, String enc):指定规范enc。
- OutputStreamWrite(OutputStream out):默认规范。
- OutputStreamWirte(OutputStream out, String enc):指定enc。
FileReader 和 FileWrite 是文件字符读者和写着。以字符为单位对文件进行读写。常用的方法和字节流一样,就是读的参数变为char变量和char数组。
- FileWrite 新增 write(String):将一个字符串写入文件
缓冲区读者和缓冲区写者
BufferedReader 和 BufferedWrite ,缓冲字符流。
- BufferedReader(Reader r)
- BufferedWrite(Write w)
- readLine(): 读一行
- newLine(): 写一行空白
File类
-
与文件名相关的
- String getName(): 获取文件名
- String getPath(): 获取文件路径
- String getAbsolutePath(): 获取文佳绝对路径
- String getParent(): 获取文件父目录名称
- boolean renameTo(FilenewName): 更改文件名,成功返回True,否则返回false。
-
文件测试方法:
- boolean exists(): 文件是否存在
- boolean canWrite(): 文件对象是否可写
- boolean canRead(): 文件对象是否可读
- boolean isFile(): 文件对象是否是文件
- boolean isDirectory(): 文件对象是否是目录
- boolean isAbsolute(): 文件对象是否是绝对路径
-
常用文件信息和方法
- long lastModified(): 获取文件最后修改时间
- long length(): 获取文佳长度
- boolean delete():删除文件对象指向的文件,成功则返回true, 否则返回false。
随机访问文件
RandomAccessFile类
//1.使用文件名
myRAFile = new RandomAccessFile(String name, String mode);
//2.使用文件对象
myRAFile = new RandomAccessFile(File file, String mode);
常用方法:
- long getFilePointer(): 返回文件指针的当前位置。
- void seek(long pos): 将文件指针置于指定的绝对位置。
第八章 图形界面设计
AWT 与 Swing
顶层容器
JFrame常用方法:
- 构造方法
- JFrame()
- JFrame(String title)
- 其它方法
- setBounds(int x, int y, int width, int height)
- setSize(int width, int height): 设置尺寸
- setBackground(Color c): 设置背景颜色
- setVisible(boolean aFlag): 设置是否显示
- pack()
- setTitle()
- getContent()
- setLayout(LayoutManager manager)
内容窗格
- 通过顶层容器的方法设置内容窗格
Container contentPane = frame.getContentPane();
contentPane.add(button, BorderLayout.CENTEER);
- 创建一个新的内容窗格
Jpanel contenPane = new Jpanel();
contenPane.setLayout(new BorderLayout());
contentPane.add(button, BorderLayout.CENTER);
frame.setContentPane(contentPane);
面板
普通面板JPanel和滚动面板JScrollPane:
JScrollPane()
JScrollPane(Component view)
void setHorizontalScrollBarPolicy(int policy) :确定水平滚动条何时显示在滚动窗体上。
void setVerticalScrollBarPolicy(int policy): 确定垂直滚动条何时显示在滚动窗体上。
Scrollbar():构造一个新的垂直滚动条
Scrollbar(int orienration): 构造一个具有指定方向的新滚动条。orientation指滚动条的方向,Scrollbar.HORIZONTAL水平滚动条,Scrollbar.VERTICAL垂直滚动条
Scrollbar(int orientation, int value, int visible, int minimum, int maximum):构造一个新的滚动条。value是滚动条初始值,visible是滚动条的可视量
标签
可设置文本、对齐方法和图标
- String getText()
- void setText(String text)
按钮
可设置文本和图标
- void setEnabled(boolean b)
- void setMnemonic(int c):设置键盘激活键
事件处理:点击按钮时产生ActionEvent 事件,注册ActionListener监听器
- addActionListener(ActionListener l): 为按钮添加事件侦程序。
- e.getSource(): 获取事件源。
- e.getActionCommand():获得事件源的命令字符串。
切换按钮、复选按钮和单选按钮
JCheckBox:复选按钮
JRadioButton: 单选按钮
- isSelected(): 判断按钮是否被选中。
事件处理:
- 点击时产生ActionEvent事件,注册ActionListener,实现actionPerform()方法。
- e.getSource():获取事件源
- e.getActionCommand():获得事件源的命令字符串
- 状态选中时产生ItemEvent事件,注册ItemListener监听器,实现itemStateChanged().
- e.getSource()
- e.getItem()
FlowLayout布局管理器
流式布局管理器
//设置布局方式
setLayout(new FlowLayout(FlowLayout.RIGHT, 20, 40));
setLayout(new FlowLayout(FlowLayout.LEFT));
setLayout(new FlowLayout());
BorderLayout布局管理器
边界管理器,分成North(上)、West(左)、center(中)、East(右)、South(下)五个部分
GridLayout布局管理器
网格布局管理器,网格变化时,网格内组件大小会发生变化。
GardLayout布局管理器
卡片布局管理器
- first()
- next()
- previous()
- last()
- show(Container parent, String name)
//内容窗格设为卡片布局
myCard = new CardLayout();
contentPane.setLayout(myCard);
//将卡片放到内容窗格中,其中p1,p2,p3为名称
contentPane.add(p1, "First");
contentPane.add(p2, "Second");
contentPane.add(p3, "Third");
BoxLayout布局管理器
盒式布局管理器
空布局
指定布局为空
//通过组件的方法设置位置
setBounds(int x, int y, int width, int height)
颜色
//java.awt包中
//创建颜色类对象
Color myColor = new Color(r, g, b);
字体
Font f = new Font("Dialong",Font.PLAIN, 14)
//Font.PLAIN:正常
//Font.BOLD:粗体
//Font.ITALIC: 斜体
Graphics类的基本功能
重写Jcomponent的paintComponent()方法,该方法得到Graphics对象,然后使用绘画方法。
Graphics 2D绘图
//绘制几何图形
import java.awt.geom;
Graphics2D g2d = (Graphics2D)g;
Line2Dline = new Line2D.Double(30.0, 30.0, 340.0, 340.0);
//绘制线段
g2d.draw(line);
第九章 Swing组件
组合框(JComboBox)
JComboBox:下拉列表
常用方法:
- void setSelectedIndex()
- objec getSelectedItem()
事件处理:
选择选项时产生ActionEvent事件,注册ActionListener监听器。或者触发ItemListener事件
列表(JList)
ListSelectionEvent事件:
- addListSelectionListener():接口
- valueChangeed(ListSelectionEvent e):接口方法
方法:
- getSelectedValue():
- setVisibleRowCount(int visibleRowCount)
文本框 (JTextField)
常用方法:
- String getText()
- void setText(String text)
- void setEditable(boolean b)
事件处理:
在JTextField里按下回车键时,产生ActionEvent事件,注册ActionListener监听器,重新actionPerformed()。
文本区 (JTextArea)
构造方法:
- JTextArea()
- JTextArea(int rows, int cows)
- JTextArea(String text)
常用方法:
- String getText()
- void setText(String text)
- void copy()
- void cut()
- void paste()
- void append(String str): 将指定文本str追加到文本区
- void inster(String str, int pos):将指定文本str插入到文本区的特定位置pos处。
- void replaceRangs(String str, int stan, int end): 用指定文本str替换文本区中从起始位置stan到结尾位置end的内容。
菜单栏和菜单
//菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
//菜单
JMenu menu1 = new JMenu("文件");
JMenu menu2 = new JMenu("帮助");
menuBar.add(menu1);
menuBar.add(menu2);
菜单项
JMenuItem item1 = new JMenyItem("打开");
JMenuItem item2 = new JMenuItem("退出");
menu1.add(item1);
menu1.addSeparator()
menu2.add(item2);
复选菜单项和单选菜单项
//复选菜单项
JCheckBoxMenuItem cbm = new JCheckBoxMenuItem("Always on Top");
//单选菜单项
JRadioButtonMenuItem rbi = new JRadioButtonMenuItem();
触发ItemEvent事件,可以使用ItemListener中的itemStateChanged()对此事件进行响应。
对话框
- 模式对话框:关闭之前其它窗口无法操作
- 非模式对话框:不管是否关闭,其他窗口都可以接受操作
标准对话框
- showConfirmDialog: 确认对话框,显示问题,要求用户进行确认(yes/ no/ cancel)。
- showInputDialog: 输入对话框,提示用户进行用户输入。
- showMessageDialog: 信息对话框,显示信息,告之用户发生了什么情况。
- showOptionDialog: 选项对话框,显示选项,要求用户进行选择。
文件对话框
- showOpenDialog(Component parent): 弹出一个“打开”文件对话框。
- showSaveDialog(Component parent): 弹出一个“保存”文件对话框。
- getSelectedFile():取得用户所选择的文件。结构File对象,得到打开的文件。
第十章 多线程
线程的结构
- 虚拟CPU
- 执行的代码
- 处理的数据
线程的状态
- 新建状态(New)
- 就绪状态(Runnable)
- 运行状态(Running)
- 阻塞状态(Blocked):
- 死亡状态(Dead)
继承Thread类创建线程
class Lefthand extends Thread{
//线程体
public void run(){
for(int i; i<=5; i++){
System.out.println("l am Left hand!");
try{
sleep(500);
}catch(InterruptedException e){}
}
}
}
class Righthand extends Thread{
//线程体
public void run(){
for(int i; i<=5; i++){
System.out.println("l am Right hand!");
try{
sleep(500);
}catch(InterruptedException e){}
}
}
}
public class ThreadTest{
static Lefthand left;
static Righthand right;
public static void main(String[] args){
left = new Lefthand();
right = new Righthand();
left.start();
right.start();
}
}
实现Runnable接口创建线程
public class xyz implements Runnable{
int i;
public void run(){
while (true){
System.out.println("Hello" + i++) ;
}
}
}
Runnable r = new xyz();
//线程
Thread t = new Thread(r);
t.start();
线程的启动
- start()
线程的调度
设置优先级:
- void setPriority(int newProiorty): 重置线程优先级
- int getProiority(): 获取当前线程的优先级
其他方法:
- sleep()
- yield()
结束线程
- interrupt(): 强迫终止线程
挂起线程
- sleep()
- wait()
- notify()
- notifyAll()
- join()
对象的锁定标志
//互斥块
public void push(charc){
synchronized(this){
//实现功能代码
}
}
//互斥方法
public synchronized void push(charc){
//实现代码
}