javase基础
javase基础
笨蛋悠米
这个作者很懒,什么都没留下…
展开
-
java中的锁
java中的锁乐观锁和悲观锁乐观锁操作数据时很乐观,认为别人不会修改数据,因此不会上锁,只有在执行更新的时候才会判断此期间别人是否修改了数据,如果修改了数据就放弃操作,否则执行操作悲观锁操作数据时很悲观,认为别人会修改数据,因此上锁,直到操作完成后才会释放锁,在上锁期间其他人不能操作数据乐观锁的实现方式实现方式一种是cas机制(compare and swap),一种是版本号机制。cas机制CAS操作包括了三个操作数,分别是需要读取的内存位置(V)、进行比较的预期值(A)和拟写入的新值(B原创 2020-09-25 15:50:52 · 200 阅读 · 0 评论 -
java正则表达式的操作
正则:用来描述或匹配一系列符合某条规则的结果。通过正则定义的规则,来匹配字符串,看能不能匹配的成功。规则:\d,\D等,需要写两个\ \,第一个是转义符^ 要匹配内容中开始位置$ 结束位置 * 出现0次或多次 没出现过和出现过+ 出现一次 或多次 一定出现过? 出现0次或1次  原创 2020-08-23 23:32:24 · 80 阅读 · 0 评论 -
java8新特性(二)(强大的Stream API、Optional类)
java8中有两个最为重要的改变。第一个是Lambda表达式;另一个则是Stream API原创 2020-08-16 21:59:38 · 230 阅读 · 0 评论 -
java8新特性(一)(Lambda表达式、函数式接口、方法引用、构造器引用和数组引用)
Lambda表达式Lambda表达式的使用举例:(o1,o2) -> Integer.compare(o1,o2);格式:-> :Lambda操作符 或 箭头操作符-> 左边:Lambda形参列表(其实就是接口中的抽象方法的形参列表)-> 右边:Lambda体(其实就是重写的抽象方法的方法体)Lambda表达式的使用:(分为6种情况)-> 左边:Lambda形参列表的参数类型可以省略(类型推断);如果Lambda形参列表只有一个参数,其一对()也可以原创 2020-08-16 00:06:41 · 182 阅读 · 0 评论 -
反射(原理、操作、动态代理的实例)
java反射java反射:指java程序在运行状态中,对于任何一个.class能够取到此类中所有的属性和方法,还有构造器。这种动态调用信息的叫反射。如果要取到封装的类中的属性和方法,你有几种方式:1 User u=new User();2 通过反射3 通过spring(javaEE中的框架技术)对bean反射的作用:如果给你的是字节码文件,调用此类中的属性和方法。这就是一般我们收到的java文件,为.class原因。.class文件是字节码文件,是跨平台的,是可运行的。如果给的是.java,原创 2020-08-13 20:15:19 · 241 阅读 · 0 评论 -
TCP、UDP网络编程(socket)
在java中使用InetAddress类代表IPInetAddress实例化方法:getByName(String host)getLocalHost()InetAddress常用方法:getHostName()getHostAddress() InetAddress inetAddress=InetAddress.getByName("www.baidu.com"); System.out.println(inetAddress); //www.bai原创 2020-08-12 20:26:46 · 187 阅读 · 0 评论 -
多线程(三)(原子性问题)
java内存中,修改后的变量值,返回到内存中,读取前后有个内存中值刷新的过程。多线程中,Volatite 来控制此属性的可见性,可见性,指能看到刷新后的值。小Demo:这个程序是死锁状态,外面的b=false无法传递进去,因为一直没有刷新这个值,在初始变量前面加上volatile。volatile boolean b=true;public class VoDemo { //volatile boolean b=true; boolean b=true; public void原创 2020-08-12 20:07:30 · 426 阅读 · 0 评论 -
多线程(二)(线程安全问题的解决、死锁问题、线程的通信等)
线程的生命周期如下图:问题:如上一篇文章末尾提到的,在卖票过程中,出现了重票、错票–>出现了线程的安全问题问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票,导致了错票、乱票的情况如何解決:当一个线程a在操作 ticket的时候,其他线程不能参与进来。直到线程a操作完 ticket时,其他线程才可以开始操作 ticket。这种情况即使线程a出现了阻塞,也不能被改变。在Java中,我们通过同步机制,来解决线程的安全问题。同步的方式,解决了线程的安全问题原创 2020-08-09 18:10:12 · 239 阅读 · 0 评论 -
多线程(一)(创建多线程和线程常用方法、优先级等)
初识多线程进程可以细化为多个线程。每个线程,拥有自己独立的:栈、程序计数器多个线程,共享同一个进程中的结构:方法区、堆一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。并行与并发:并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事情。并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事。多线程的创建,在jdk5之前有两种方法:方式一:继承于Thread类原创 2020-08-08 21:10:28 · 288 阅读 · 0 评论 -
设计模式(二)(策略)
设计模式1.策略模式策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。策略模式的优点:使用策略模式可以避免使用多重条件(if-else)语句。缺点:1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。2.由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。策略模式涉及到三个角色:抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体原创 2020-08-03 19:50:27 · 106 阅读 · 0 评论 -
File类
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。File类的使用:File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)File类声明在java.io包下File类涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法。并未涉及到写入或读取文件内容的操作。如果需要读取或者写入文件内容,必须使用IO流来完成后续File类的对象常会作为参数传递到流的构造器中,指明写入或读取的"终点"创建File类的实例:F原创 2020-08-01 21:56:07 · 112 阅读 · 0 评论 -
Collections工具类和两种比较器
Collections工具类Collections是用来操作Collection、Map的工具类Collection是一个接口,内部有List、Set等接口。方法:reverse(List):反转list中元素的顺序shuffle(List):对list集合中的元素随机排序sort(List):按升序排列swap(List,int,int):将list集合中的两个元素位置交换max(Collection):返回集合中的最大值min(Collection):返回集合中的最小值int fr原创 2020-08-01 15:21:05 · 502 阅读 · 0 评论 -
Collection集合与数组之间的转换以及迭代器的使用
Collection集合与数组之间的转换:集合—>数组:toArray() List list=new ArrayList(); list.add("sad"); list.add(123); list.add("asd"); Object[] arr=list.toArray(); for (int i = 0; i < arr.length; i++) { System.原创 2020-07-31 14:11:26 · 347 阅读 · 0 评论 -
Set接口
Set接口是Collection集合的一个子类。Set接口是储存无序的、不可重复的数据。(这里的有序和无序指的是在数组或链表中有无顺序的存储,和输出的顺序没关),我们常常用它来存储不重复的数据。我们实现Set接口的实现类有三种,他们都有什么区别呢?HashSetLinkedHashSetTreeSet出现版本:jdk1.2出现版本:jdk1.2出现版本:jdk1.0,所以是古老版本通过HashMap实现的HashSet的子类,在两边增加两个值,实现链表式链接底层使用原创 2020-07-31 11:10:22 · 316 阅读 · 0 评论 -
List接口
动态数组List接口是一个储存有序的、可重复的数据,它是一个动态的数组。我们想要实现它有三种方法。以及它们三个都能实现动态数组区别在哪里呢?ArrayListLinkedListVector出现版本:jdk1.2出现版本:jdk1.2出现版本:jdk1.0,所以它是古老实现类,list集合是jdk1.2出现的线程不安全,效率高线程不安全,效率高线程安全,效率低底层采用Object[] elementData数组储存底层使用双向链表储存底层采用Object[原创 2020-07-30 09:52:49 · 140 阅读 · 0 评论 -
String、StringBuilder、StringBuffer的常用方法
这三种都是字符串类型的,String 是字符串常量,StringBuilder、StringBuffer是字符串变量StringStringBufferStringBuilderString的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间StringBuffer是可变类,利用缓存区把数组长度设为可变的,线程安全,可以同步可变类,速度更快;利用缓存区把数组长度设为可变的,不能安全使用多线程,不能同步不可变原创 2020-07-29 19:55:08 · 222 阅读 · 0 评论 -
现在用到的Calendar类和过时的Date类
Date类Date方法大部分已经被弃用public class DateDemo { public static void main(String[] args) { Date d=new Date(0);//传入0 从初始化给的默认值开始 System.out.println(d); //如果不传入0 默认是电脑现在的时间 Date d2=new Date(); System.out.println(d2);原创 2020-07-28 23:38:12 · 605 阅读 · 0 评论 -
Math类中的方法
Math类中的方法本次学习的方法有绝对值(Math.abs)向上取整(Math.ceil) 向下取整(Math.floor)0…1之间的随机数(Math.random()) //*多少就是在0…多少之间取几位小数 两个方法-1.乘100后向下取整,再除100-2.DecimalFormat 类实现,这个类会四舍五入随机数的类(Random) 调用.nextInt(52)方法,即可得到0…51之间的随机数平方(Math.pow(a,b)) //a的b次方原创 2020-07-28 20:32:37 · 344 阅读 · 0 评论 -
设计模式(一)(单例,工厂,代理,代理工厂)
设计模式1.单例模式单例模式:为了解决同一对象要创建很多次的问题。因为同一个对象只创建一次,为了节约内存空间。比如很多用户浏览同一商品,当点击同一商品的信息时,其实创建相同的对象.我们可以通过地址是否相等来判断对象new了几次。本次单例模式学习到的有三种:懒汉式饿汉式枚举一般情况下使用的是饿汉式,但是枚举是实现单例模式的最佳方法。懒汉式:懒汉式没那么“饿”,只有在真正需要的时候再去创建实例。所以在类中先判断实例是否为空,为空再去创建。但是在多线程中会出问题,因为可能同时创建多个实例。原创 2020-07-28 20:01:06 · 288 阅读 · 0 评论 -
io流读写文件
1.字节流读写2.字符流读写读取文件 //读取文件 public static void readfile() throws IOException { //创建文件字符输入流对象,即打开文件 FileReader fr=new FileReader("d:\\io流数据的验证\\test.txt"); //定义一个字符数组 char date[]=new char[1024]; //将数据读入data内,n原创 2020-06-09 16:47:37 · 784 阅读 · 0 评论 -
随机数生成
1.Random函数Random中的nextInt(x)函数能生成一个在0-x之间的数字(不包括x)即:0 ≤ random<x Random r=new Random(); int[] s=new int[10]; for(int i=0;i<s.length;i++) { s[i]=r.nextInt(3); //生成一个小于3、大于等于0的随机数 System.原创 2020-05-18 16:46:36 · 300 阅读 · 0 评论