classpath的设置

classpath:
.;具体路径

将.放在前面的目的是先在当前路径找java文件,找不到时再到具体指定路径中找

一般不要配置classpath

&&与&

&&有短路效果

位异或特点

一个数被另一个数位异或两次,数值保持不变

不借用第三方变量交换两个变量的值

第一种

x = x + y;
y = x - y;
x = x - y;

第二种

x = x ^ y;
y = x ^ y;
x = x ^ y;

>>>

无符号左移

键盘录入

import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int x = sc.nextInt();

switch

接受的表达式:
本数据类型有:byte、short、char、int
引用数据类型有:枚举(1.5)、String字符串(1.7)

default可以放在case前,但执行顺序仍然是先看case

mark标记

a:

break a;

用于多层循环时跳出指定循环

文档注释

类注释:
/**

@author ***
@version v1.0
*/

函数注释:
/**

@param *** ***
@return ***
*/

编译文档注释:
javadoc -d api -version -author *.java

final修饰类成员变量

初始化时机:
显示初始化
在对象构造函数中赋值

abstract不能共存的关键字

abstract和static
abstract和final
abstract和private

Interface

成员变量只能是常量,默认修饰符public static final
没有构造方法
只有抽象方法

内部类

内部类可以直接访问外部类的成员
构造:
外部类名.内部类名 对象名 = new 外部类().new 内部类();

局部内部类在访问他所在方法中的局部变量必须用final修饰

Eclipse

alt+/:代码提示作用
ctrl+n:新建
ctrl+shift+f:代码格式化
ctrl+shift+o:导入包
ctrl+/,ctrl+shift+/,ctrl+shift+\:注释
选中代码+alt+上/下箭头:代码上下移动
F3,ctrl+单击:查看源码
ctrl+shift+t:查找具体类
ctrl+o:查找具体类的具体方法
ctrl+l:根据右边生成左边的数据类型,生成方法
ctrl+d:删除代码
alt+shift+m:抽取方法
alt+shift+r:改名
alt+shift+s:生成代码

正则表达式

[abc]:a或b或c
[^abc]:除a、b、c外的其他任意一个字符
[a-zA-Z]:任意一个英文字母
[a-d[m-p]]:并集
[a-z&&[def]]:交集

.:任意字符
\d:数字,等价于[0-9]
\D:非数字,等价于[^0-9]
\s:空白字符,等价于[ \t\n\x0B\f\r]
\S:非空白字符,等价于[^\s]
\w:单词字符,等价于[a-zA-Z_0-9]
\W:非单词字符,等价于[^w]

数量词

?:0或1次
*:0或多次
+:1或多次
{n}:n次
{n,}:至少n次
{n,m}:至少n次,不超过m次

String的正则表达式相关方法:

1.split方法的参数是正则表达式字符串
如果用.来分割字符串,需要用\.
2.replaceAll(regex, repacement)
3.matches(regex)

分组:

从左到右计算开括号来编号
((A)(B©))

  1. ((A)(B©))
  2. (A)
  3. (B©)
  4. ©

(.)\1(.)\2:1表示第1组再出现1次,2表示第2组再

出现1次,叠词,快快乐乐

(…)\1:高兴高兴

$1:获取第1组的数据

Pattern类

Pattern p = Pattern.compile(“regex”); // 创建

模式

Matcher m = p.matcher(str); // 创建匹配器
boolean b = m.matches(); // 看是否能匹配

m.find()与m.group():
先find,返回成功/失败,再用group获取

常用类

Random类:

如果构造时传入固定的种子,那取出的随机

数序列将相同
nextInt()
nextInt(n)

System类:

gc()呼叫垃圾回收,Object的finalize()执行垃圾回收
arraycopy():复制数组

BigInteger类

BigDecimal类:构造时传数值则计算不够精确,不推荐;但如果传字符串,则计算准确;或者用valueOf()来返回BigDecimal对象,参数为数值,计算也准确

SimpleDateFormat类:

日期格式化类
str = format(date)
date = parse(str)

Calendar类

Calendar.getInstance()创建GregorianCalendar类对象
get(field)
set(year, month, date):日期设置(月份从0开始计)
add(field, amount):日期累加

Collection-list

list的listIterator()返回的迭代器,有add方法,可以增加元素,避免并发修改异常contains和remove方法底层依赖的是equals方法,所以一般需要重写equals方法

泛型

静态方法必须声明自己的泛型 public static
方法泛型 public

接口泛型
class Demo implements Inter
以下不推荐
class Demo implements Inter

泛型通配符

1.<?>:任意类型
2.<? extends E>:向下限定,E及其子类
无法存入元素
频繁向外读取内容
3.<? super E>:向上限定,E及其父类
传子类可以
经常往里插入
<T extends Comparable<? super T>>

增强for循环底层依赖的是iterator,可用于数组或collections-list

三种迭代能否执行删除:

普通for循环可以删除,但索引要–
迭代器可删除,但要使用迭代器的remove,否则会出现并发修改异常
增强for循环中不能删除

静态导入import static,导入类中的静态方法

可变参数必须是方法的最后一个参数

Arrays的asList方法:将数组转为集合,且不能增删元素

list的toArray:将集合转为数组,其参数为数组,如果该数组长度小于等于集合的长度,返回的数组和为集合的长度,如果大于,由返回的数组长度与参数数组长度一样

collections-map

map没有iterator方法

HashMap与Hashtable
HashMap线程不安全,Hashtable线程安全
HashMap可存储null键和null值
Hashtable不可存储null键和null值

IO流

拷贝文本文件不推荐使用字符流
读取一段文本或写出一段文本可使用字符流

BufferedWriter的newLine():输出换行,可跨平台
晚开早关

InputStreamReader:
将字节输入流转成字符输入流

SequenceInputStream:
将多个字节输入流整合成一个
应用:如歌唱串烧

ByteArrayOutputStream:
内存输出流

ObjectOutputStream、ObjectInputStream:
对象操作流

DataInputStream、DataOutputStream:
数据输入输出流,可按基本数据类型大小读写数据

PrintStream:
打印字节流

PrintWriter:
打印字符流
自动刷出只针对println方法,对write无效

Properties:

setProperty()
getProperty()
propertyNames()
load(InputStream)
store(OutputStream)

多线程

join():当前线程暂停,执行join()方法的线程插队执行
yield():让出CPU
优先级:10最高,1最低

同步代码块:

synchronized(obj){}
	用哪个对象锁,就用哪个对象调用wait方法

同步方法:

非静态的同步方法的锁对象是this
	静态同步方法的锁对象是该类的字节码对象

避免死锁:

同步代码块不要嵌套

wait():当前线程等待,可以放在while中
notify():随机唤醒单个等待的线程
notifyAll()

Vector、StringBuffer、Hashtable是线程安全的

单例
Runtime
r.exec(“shutdown -s -t 300”)
r.exec(“shutdown -a”)

TimerTask
重写run()
//指定时间安排指定的任务
timer.schedule(new MyTimerTask(), new Date(), looptime);

sleep与wait的区别:
sleep必须传入参数,表示等待多久醒来
wait可以传入参数,也可以不传,表示多久开始等待
sleep在同步函数或代码块中,不释放锁
wait在同步函数或代码块中,释放锁

ReentrantLock:
互斥锁
c1 = lock.newCondition();
c2 = lock.newCondition();
lock.lock();
c1.await();// 用if即可
c2.signal();
lock.unlock();

线程组ThreadGroup
Thread.getThreadGroup();

线程的五种状态:
new
ready
stock
run
dead

线程池
Executors工厂类来产生线程池
ExecutorService pool = newFixedThreadPool()
submit(runnable);//将线程放进池子里并执行,返回Future
shutdown();//关闭线程池

GUI(Graphical User Interface)

Frame:窗口
	frame.setSize(w,h);
	frame.setLocation(x,y);
	frame.setIconImage();
	
	frame.setLayout();
	布局管理器:
		FlowLayout:流式布局
		BorderLayout:边界布局
		GridLayout:网格布局
		CardLayout:卡片布局
		GridBagLayout:网格包布局
	frame.addWindowListener(new MyWindowListner());
	frame.addWindowListener(new MyWindowAdapter());//WindowAdapter比WindowListner的好处是不需要重写所有的接口
	**.addMouseListener(MouseAdapter);
	**.addKeyListener(KeyAdapter);
	**.addActionListener(ActionListener);//添加动作监听
	frame.setVisible(true);//需要手动设置可见

网络编程:

常用端口:
	mysql:3306
	oracle:1521
	web:80
	tomcat:8080
	qq:4000
	feiq:2425

UDP:

DatagramSocket()
DatagramPacket

TCP:

Socket	
	getInputStream()
	getOutputStream()
	
ServerSocket
	accept()
	getInputStream()
	getOutputStream()

输入流可包装为BufferedReader
输出流可包装为PrintStream

反射

类加载器

Bootstrap ClassLoader:根类加载器
	加载JRE的lib目录中的rt.jar
Extension ClassLoader:扩展类加载器
	加载JRE扩展目录中的jar包,即JRE的lib目录下ext目录的jar包
System ClassLoader:系统类加载器

反射

clazz.newInstance()
clazz.getConstructor(...).newInstance(...)
clazz.getField(name).set(obj, value)
clazz.getDeclaredField(name).setAccessible(true); // 去除私有权限
clazz.getDeclaredField(name).set(obj, value); // 可针对私有成员变量
clazz.getMethod(name).invoke(obj);
clazz.getMethod(name,paramtype.class).invoke(obj,param);

反射可越过泛型检查

动态代理

java.lang.reflect提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可生成动态代理对象,且只能针对接口做代理
cglib,Proxy类中的方法可创建动态代理类对象

MyInvocationHandler implements InvocationHandler
	实现invoke方法	

Proxy.newProxyInstance(classloader,interfaces,invocationhandler);

枚举类:

enum
	ordinal():返回编号
	compareTo(enum):按编号比较
	name():名称
	toString():默认返回名称
	valueOf(clazz,"名称"):通过字节码对象获取枚举项

JDK1.7:

0b001:二进制
100_000:数字中可出现下划线
switch可用字符串
泛型简化,菱形泛型
我个catch异常合并,用|
try-with-resources try(){}

JDK1.8:

接口中可定义有方法体的方法,如果是非静态的,必须用default修饰,静态的则不用
局部内部类在访问他所在方法中的局部变量时可省去final修饰,实际上就是final的