java基础学习

函数式接口

接口中只有一个抽象方法

匿名对象,只实例化不赋值给变量

匿名内部类,继承同时实例化

String s = new String(“abc”);创建了两个对象,一个是常量池中“abc” 一个是字符串对象

static

静态变量,在静态区

在这里插入图片描述

final static int //常量


局部代码块(局部变量的位置)

构造代码块(构造函数)

静态代码块 static{}

顺序:静态->构造->局部


pojo内一般包装类

局部变量一般基本数据类型

包装类除了Double和Float都会缓存一定范围数据

包装类和基本数据类型==

Integer a = 1;

Integer b = 1;

a==b;//true

Integer a = 128;

Integer b = 128;

a==b;//false

int a = 128;

int b = 128;

a==b;//true

Integer a = new Integer(1);

Integer b = new Integer(1);

a==b;//false

Integer a = new Integer(1);

int b = 1;

a==b;//true 隐式转换

接口

默认方法defaut,可以被继承重写

接口中的静态方法只能通过接口调用

接口中私有方法,只能在接口中调用,提供给接口中的默认方法和静态方法使用

集合

集合中必须存引用数据类型

Collection接口有两个子接口List、Set

List:ArrayList,LinkedList 有序,重复

Set:HashSet,TreeSet 无序,不重复

ArrayList实际上是一个长度可变的数组

数组:查询快,增删慢

链表:查询慢,增删快

泛型

把运行时错误提前到编译时

泛型的上限和下限

<? extends Person> 限定Person类的子类

<? super Student> 限定Student类的父类

IO流

file.getAbsolutePath()

file.getName()

file.getPath()

file.length()

f.createNewFile() //创建文件

f.delete() //删除文件

f.exist() //文件存在

f.isFile() //是否是文件

f.list() //f下所有文件和文件夹的名字

f.listFiles() //f下所有文件和文件夹的文件对象

字节输入/输出

FileInputStream FileOutputStream

bytes[] bys = new bytes[1024];

int len = fis.read(bys) fos.write(bys)

字符输出/输出

FileReader FileWriter

char[] buf= new char[10];

int len = fr.read(buf) fw.write(buf,0,len)

字节缓冲

BufferedInputStream BufferedOutpuStream

字符缓冲

BufferedWriter BufferedReader

bw.write() bw.newLine br.readLine()

序列化

在这里插入图片描述

被序列化的类必须实现serializable接口

private **transient **Integer age; 表示不被序列化

properties集合与io流交互

Properties pro = new Properties();

pro.setProperty(“zhangsan”,“23”);

FileOutputStream out = new FileOutStream(“template/pro.properties”);

pro.store(out,“save date”);//保存数据

out.close;

读取

Properties pro = new Properties();

FileInputStream input = new FileInputStream(“template/pro.properties”);

pro.load(input);

System.out.println(pro);

反射注解

在运行状态中,对于任何一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法能成为java语言的反射机制

在这里插入图片描述

获取Class类的对象(字节码文件对象对应的Class类型的对象)

1.Object类的getClass方法

Person p = new Person();

p.getClass();

2.通过 类名.class

Class c1 = Person.class;

3.通过Class中的方法(将类名作为字符串传递给Class类中的今天方法forName即可)

Class c2 = Class.forName(“com.zz.demo.Person”);


多线程

不同线程在不同的栈空间下,不互相影响

线程6种状态

在这里插入图片描述

线程池

可以控制一定线程数量,降低资源消耗,任务直接从线程池取出线程运行,运行完毕后归还,省去了线程的创建和销毁提高了效率、响应速度

sychronize

在这里插入图片描述

锁的标识存储在markword

锁升级

在这里插入图片描述

在这里插入图片描述

自旋锁 CAS(compare and set)不需要拿到锁

读取数据->操作完数据后与原数据比较,如果不同说明有其他线程修改过,重新读取再操作,否则将数据修改为操作后的值
ABA问题,在数据被修改多次后回到了原本的值,jdk提供解决方法,给资源加上一个version(一种version是修改过后就变成true,一种是版本号改变)

乐观锁,悲观锁,轻量级锁,重量级锁

**乐观锁 **在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测

** 悲观锁**修改数据之前先锁定,再修改

自旋锁->轻量级锁 线程在jvm级别,while(true)一直判断

轻量级锁 适合临界区操作时间短(执行时间短),少量的线程数 因为在jvm级别,所以线程是活的,需要一直线程切换,切换过多浪费资源

重量级锁->把线程交给操作系统,需要排队等待 适合

重量级锁 适合临界区操作时间长的(执行时间长),数量多的线程 操作系统级别,需要等待

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值