首页 > 技术文章 > java基础

jinss 2020-12-15 17:12 原文

""   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 

推荐阅读