java基础
"" null 不写 区别:
++i 与 i++ :
基础数据类型
包装类:初始值为null场景
数字转字符串
int i = 123;
String str = String.valueof(i);
"" + i;
抽象类
abstract 关键字修饰的类名
抽象方法 也要用abstract来修饰
第一章
项目开发流程
产品经理 -- > UI设计 --> 开发组(前端、后台)-- > 测试 ---> 上线 --> 再测 --> 迭代 (写bug,改bug 加功能……)
开发规范
第二章
面向对象
OOP,是一种思想,
类和对象
类:对class,包含属性,方法,构造器方法
对象:是类的一个具体实物,new 构造器方法()
,保存在内存里
对象的调用:通过“ . ” 来调用。变量名.方法();
变量名.属性;
重载
方法重载,方法名相同,参数列表不同
构造器方法
每个类有一个默认的无参的构造器方法。一旦给定一个构造器方法,就没有默认无参的构造器方法。给一个无参构造器方法。
this:
关键字,代表当前类的对象。。。。
object中的equals方法,实际上调用的是==比较,比较的是对象的内存地址值。
toString方法。把对像的字符串输出。类名@1344422abf
static:
关键字。静态 变量,常量,方法,代码块
静态代码块 > 代码块 > 构造器
统统都是类的。类名.变量名
静态方法 以及静态代码块中 不能使用this,super
内部类(了解)
第三章
包
就是文件夹,在代码中,包的层级关系 .
如果不创建包,默认创建的Java文件在default包里。这个文件不能被其他包里的类引用。
一般是公司域名反写 com.taobao.bean,com.taobao.service,com.caisui.hisplat.util
import 、 package
作用域
同包 同类 不同包
不是子类 | 子类
private x √ x x
(default) √ √ x x
protected √ √ x √
public √ √ √ √
封装
把类的属性都用private修饰,提供public的get和set方法
class Demo{
private String name;
private String sex;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
//构造
main
}
//Test
第四章
继承
extends,
class 类名 extends 父类{
}
就拥有父类的(private,(default), public,protected)属性和方法
@override重写
overload 重载
继承的优缺点
super:指父类的对象
this:当前类的对象
final与finally的区别?
final 修饰
类 不能被继承
方法 不能被重写
变量 不能被修改
前数据类型 instanceof 后数据类型
判断前面的数据类型是否被后面的数据类型包含
第五章
多态
类之间要有上下级关系
向上转型
父类型 变量 = new 子类型()
变量里只有与父类里同名的方法
向下转型
子类型 变量 = (子类型)父类型变量;
强制转换不可以随便转;父类型变量里面本身就是子类的对象;
重写与重载的区别?
对象 instanceof 类型
关键字,判断对象是否属于类型(当前自己的类型和父类类型)
第六章
异常
编译时异常
检查异常
javac
运行时异常
RuntimeException
ClassCastException
NullPointerException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
保证代码的健壮性
try{
}catch(NullPointerException ex){
}catch(Exception | ArrayIndexOutOfBoundsException |... e){
}finally{
}
当try代码块中使用return返回,并且finally代码块中同样使用return语句,先执行try中的代码块,再执行finally代码块,最后把finally中的return结果进行返回。
throw
代码块中用来抛出异常
throws
定义在方法名上,当前方法中有该异常可能会抛出,需要调用者适当处理
一个类只能extends 一个父类,但是可以implements多个接口
一个接口可以extends 多个接口
自定义异常 继承 Exception
一般捕获明确的异常
最好延迟捕获
第七章 抽象类和接口
抽象类
abstract 修饰 类 叫抽象类
修饰方法 叫抽象方法
可以没有抽象方法
接口
interface
都是抽象方法
多继承,多实现
第八章
集合框架
Collection
List
ArrayList
add();
addAll();
set(..,..);
remove();
size();
get();
可以动态变化长度的数组
查询速度块,操作速度慢
LinkedList
链表结构
Set
去重
HashSet
根据hashCode(),
TreeSet
放有序
数组 》 大写字母 》小写字母 》汉字
Map
key - value对
HashMap
Key:
只能有一个key为null
里面的值不能重复
Value:
可以多个值为NULL
put(key,value)
get(key)
remove(key)
keySet()
entrySet() Map.Entry .getKey() .getValue()
collectionValues()
size()
TreeMap
HashTable
//ConCurrentHashMap
//LinkedHashMap
Properties属性类 用来读取.properties类型的文件
//遍历
List
for(int i = 0;i<list.size();i++){
///得到每一个元素
Object = list.get(i);
}
while(){
}
for(Object o : list){
//每一个o是不是
}
Set
for(Object o : set){
//每一个o是不是
}
//set.toArray()
//Iterator iterator = set.iterator() 获取一个迭代器对象
iterator.hasNext() 判断指针后面还有没有元素
iterator.next() 把指针向后移动一位,并取出当前位的值
iterator.remove();
Map
第十章
File
String path = "路径";/// \\ /
//File.separator 属性会根据当前系统自动换成对应的分隔符
File f = new File(path);
f.mkdir() 创建当前目录
f.mkdirs() 创建路径中所有的目录结构
f.createNewFile() 创建文件
f.exists() 判断文件是否存在
f.isFile()
f.isDirectory()
f.list() 当前目录中的所有文件(文件夹)名
f.listFile() 当前目录中的所有文件(文件夹)File对象
f.delete() //注意,如果删除的是文件夹,必须里面没有文件
IO流
字节流
inputStream / outputStream
字符流
Reader / Writer
FileReader
File sourceFile= new File(path);
FileReader fr = new FileReader(sourceFile);
FileWriter
File targetFile = new File(path2);
FileWriter fw = new FileWriter(targetFile);
怎么写文件
int c = fr.read();///一次读取一个字符
fw.write(c); //把c写到目标文件中
while(c != -1){
fw.write(c);
c=fr.read();
}
读取一个字符数组
char[] chars = new char[1024];
int len = fr.read(chars);//读取一个字符数组,返回读取的长度
fw.write(chars,0,len);
while(len != -1){
len = fr.read(chars);
fw.write(chars,0,len);
}
FileInputStream
FileOutputStream
转换流
把字节流转换成字符流
InputStreamReader
new InputStreamReader(new InputStream(path),"utf-8")
OutputStreamWriter
序列化和反序列化
把对象转换为有序的字节序列
1.存成文件
2.网络传输
ObjectInputStream
ObjectOutputStream
对象实现序列化(Serializable)接口
IO 与 NIO
非阻塞IO
buffer 缓冲区
ByteBuffer
IntBuffer
...
put()存放数据
flip()切换
get()取数据
channel 管道
selector 选择器
Sorcket , ServerSorcket 套接字
第十一章
线程 ,程序运行的最小单元,
进程,运行的程序
生命周期
New
Ready
Running
Blocking
Dead
一个进程包含多个线程
extends Thread
implements Runnable
重写 run()
Thread thread = new Thread();//代理模式
thread.start();
main主线程
重写构造器,调用父类super(name);
Thread.currentThread() 获取当前运行的线程对象
getName();
setPriority(); 设置线程优先级
Thread.sleep(1000); 休眠当前运行的线程
join(); 把子线程添加到当前线程中,等待子线程执行结束,
yield();
临界资源
多个线程共享的资源
问题:对数据操作不同步?
关键字:synchronized 、 接口Lock
代码块
方法
静态方法
锁 死锁产生的原因
synchronized(object)
wait()
notify()
notifyAll()
生产者和消费者
synchronized