环境变量
- 在Oracle官网下载安装jdk
- 配置环境变量JAVA_HOME和PATH
-
标识符
合法标识符
由26英文字母的大小写,_,0-9或$组成
- 数字不可以开头
- 标识符中不能包含空格
-
标识符规范
包名:都小写
- 类名,接口名:多单词组成时,所有单词的首字母大写
- 变量名,方法名:多单词组成时,除第一个单词外的其他单词首字母大写
-
基本数据类型(8)
byte:1个字节
- short:2个字节
- int:4个字节
- long:8个字节,定义以L或l结尾
- float:4个字节,定义以F或f结尾
- double:8个字节
- char:2个字节
- boolean:1个字节
注意:byte、short、char三者之间做运算结果类型为int
运算符
算数运算符
赋值运算符
- =
- +=
- -=
- *=
- /=
注意:2~5不会改变变量的数据类型
byte b1=1;b1 *= 0.1 //结果为0
比较运算符
- =
- !=
- >
- <
=
- <=
-
逻辑运算符
&:无论左边是true还是false,都会执行运算符两边的判断
- &&:当该符号左边为false时,不再执行右边的判断
- |:无论左边是true还是false,都会执行运算符两边的判断
- ||:当该符号左边为true时,不再执行右边的判断
- !
-
位运算符
<<(左移)
(右移)
(无符号右移)
- &(与)
- |(或)
- ^(异或)
- ~(取反)
三元运算符
// 条件表达式? result1:result2;a>b? a:b;
程序控制结构
顺序结构
分支结构
if … else
if … else if … else
switch case循环结构
for
while
while … do
do … whilestatic
static修饰变量
static修饰方法代码块
```java /* 静态代码块
随着类的加载而执行,只执行一次 初始化类信息 如果一个类中定义了多个静态代码块,则按先后顺序执行 */
static{
}
/* 非静态代码块
随着对象的创建而执行,每创建一次对象就执行一次 初始化对象信息 如果一个类中定义了多个非静态代码块,则按先后顺序执行 */ { System.out.println(“代码块”); }
<a name="3O7yZ"></a># finalfinal修饰类表示此类不能被继承<br />final修饰类中的方法,子类不能重写此方法<br />final修饰一个属性,则此属性不能再被赋值:显示初始化,代码块中初始化,构造器中初始化<br />final修饰局部变量,则不可被更改<br />final修饰形参,则在方法体中,此形参也不可再被更改<a name="6jWLc"></a># 抽象类 abstractabstract修饰类<br />abstract修饰方法:父类有抽象方法,子类需重写此抽象方法,否则子类只能是抽象类<br />abstract不能修饰私有方法<a name="Tg5yq"></a># 接口接口中只能定义全局常量和抽象方法<br />全局常量:public、static、final的<br />抽象方法:public、abstract的<a name="FWtQB"></a># 异常<a name="DwJnb"></a>## 自定义异常```javapublic class MyException extends Exception {public MyException(){}public MyException(String msg){super.message(msg);}}
多线程
继承Thread方式
常用方法:
start()
run()
currentThread()
getName()
setName()
yield():释放当前线程的CPU执行权
join():线程调用此方法获得CPU执行权
stop():结束线程
sleep():睡眠
setPriority(int p):设置优先级
getPriority():获得优先级
以下三个方法必须由同步代码块或同步方法中的监视器调用
Object中的方法
wait()
notify()
notifyAll()
class MyThread extends Thread {@Overriedpublic void run(){for(int i=1; i<100; i++) {System.out.println(Thread.currentThread.getName() + ":" +i);}}}public class ThreadTest{public static void main(String [] args) {MyThread t1 = new MyThread();t1.start();}}
实现Runnable方式
/*1. 实现Runnable接口2. 使实现Runnable接口的类实现run方法3. 创建实现Runnable接口的类4. 创建Thread类,构造器中写刚刚实现Runnable接口的类5. 调用Thread的start方法*/class Window implements Runnable {@Overriedpublic void run(){}}public MyThread {public static void main(String [] args){Window w = new Window();Thread t1 = new Thread(w);t1.start();Thread t2 = new Thread(w);t2.start();}}
线程的生命周期
- 新建
- 就绪
- 运行
- 阻塞
- 死亡
线程锁
同步代码块
/*synchronized关键字*/class Window implements Runnable {private Object obj = new Object();@Overriedpublic void run(){//多个线程锁必须是同一把,可使用当前对象thissynchronized(obj){for(int i=1; i<=100; i++){System.out.println(Thread.currentThread().getName() +":"+i);}}}}//使用类当锁class MyThread extends Thread {@Overriedpublic void run(){synchronized(Window.class){for(int i=1; i<100; i++) {System.out.println(Thread.currentThread.getName() + ":" +i);}}}}
同步方法
class Window implements Runnable {private Object obj = new Object();@Overriedpublic void run(){show();}private synchronized void show(){ //此时的锁为thisfor(int i=1; i<=100; i++){System.out.println(Thread.currentThread().getName() +":"+i);}}}//使用类当锁class MyThread extends Thread {@Overriedpublic void run(){show();}//需要修饰为静态方法private static synchronized void show(){ //此时的锁为MyThread.classfor(int i=1; i<100; i++) {System.out.println(Thread.currentThread.getName() + ":" +i);}}}
Lock锁
class Window implements Runnable {private ReentrantLock lock = new ReentrantLock();@Overriedpublic void run(){lock.lock();for(int i=1; i<=100; i++){System.out.println(Thread.currentThread().getName() +":"+i);}lock.unLock();}}
sleep()和wait()的异同
相同:都会使线程进入阻塞
不同:
- 声明的位置不同:sleep在Thread中声明,wait()在Object中声明
- 调用的场景不同:wait只能在同步代码块或同步方法中调用
- sleep不会释放锁,wait会释放同步锁
Callable接口
```java /* - 写一个类实现Callable接口
- 让Callable接口的实现类实现call方法 call方法有返回值 可以填写泛型
- 创建Callable接口的实现类对象
- 创建FutureTask对象,同时将Callable接口的实现类对象作为参数传入FutureTask的构造器 FutureTask对象有一个get方法可以获得Callable接口实现类中call方法的返回值 FutureTask也有泛型
- new一个Thread对象将FutureTask对象传入其构造器中,并执行start方法 */
class MyThread implements Callable
@Overriedpublic Integer call() throws Exception {}
}
public class CallableTest {
public static void main(String [] args){
MyThread t = new MyThread();
FutureTask
<a name="wBaSZ"></a>## 线程池```javaclass RunnableThread implements Runnable{@Overriedpublic void run(){//具体要执行的内容}}class CallableThread implements Callable<Integer>{@Overriedpublic Integer call() throws Exception{//具体要执行的内容}}public class ThreadPool {public static void main(String [] args){//使用ThreadPoolExecutor接收service可以设置线程池的属性ExecutorService service = Executors.newFixedThreadPool(10);//service.execute(new RunnableThread()); 此方法适用于Runnable接口service.submit(new CallableThread()); //此方法适用于Callable接口//关闭连接池service.shutdown();}}
IO流
IO流体系
| 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 | |
|---|---|---|---|---|
| 抽象基类 | InputStream | OutputStream | InputReader | OutputWriter |
| 访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
| 访问数组 | ByteArrayInputStream | ByteArrayOutputStream | ByteArrayReader | ByteArrayWriter |
| 访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
| 访问字符串 | StringReader | StringWriter | ||
| 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
| 转换流 | InputStreamReader | OuputStreamWriter | ||
| 对象流 | ObjectInputStream | ObjectOutputStream | ||
| 打印流 | PrintStream | PrintWriter | ||
| 推回输出流 | PushbackInputStream | PushbackReader | ||
| 特殊流 | DataInputStream | DataOutputStream |
