
java基础
不秃头的程序员Zzz
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
接口和抽象类有什么联系和区别?
抽象类:一个类中有抽象方法,这个类就变成了抽象类。抽象类中class的前面必须有abstract修饰符。抽象类中可以有普通方法,也可以有抽象方法,而抽象方法的个数可以是0个,也可以是多个。子类继承父类,必须重写全部的抽象方法,除非这个类也变成了抽象类。接口:表面上看,接口是一种特殊的抽象类,但是类是类,接口是接口,是并列的关系。接口中所有方法都必须是抽象的。(1.8之后允许接口定义非...原创 2019-12-03 20:49:28 · 269 阅读 · 0 评论 -
ThreadLocal原理分析与使用场景
什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在...原创 2019-11-28 10:02:57 · 277 阅读 · 0 评论 -
Volitile关键字
保证可见性:即保证了不同线程对这个变量的可见性,即一个线程修改了本变量的值,对其他线程来说是立即可见的禁止进行指令重排序,保证线程的有序行.保持内存可见性内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态。失效数据以下是一个简单的可变整数类:public class MutableInteger {private int value;public ...原创 2019-11-28 10:01:02 · 459 阅读 · 0 评论 -
线程的实现
从底层讲 多线程有三个中 一种是用户级线程 一种是内核级线程 还有一种是用户级线程和内核级线程混合从jvm角度讲 线程的实现有四种 分别为一种是继承Tread类一种是实现runnable接口 优势:本身是接口可以多继承,接口更适合多个线程的代码去共享同个资源接口代码可以被多个线程实现,线程和代码独立线程池只能放入runnable和callable接口一种是实现callable接口...原创 2019-11-27 00:18:06 · 90 阅读 · 0 评论 -
多线程编程的三大特性
多线程编程应该满足三大特性有序行:即程序的执行按照代码的先后顺序来执行可见行:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到 就不会出现脏读的情况原子性:一个操作或多个操作全部执行并且在执行过程中不会被任何因素打断,要不就不执行...原创 2019-11-26 22:26:19 · 208 阅读 · 0 评论 -
java内存模型
首先 类加载器 将class文件加载到内存里面然后方法区会去存储 关键字 类的名称 方法名 参数 返回值然后从方法区里找第一个启动的方法 main()找到之后 为main()方法创建虚拟机栈然后对象实例化在堆里面main方法的实例变量在java栈的栈帧中之后再为main()方法创建程序计数器 记录当前执行的位置java栈中的main()的栈帧请求CPU资源CPU将java中的栈顶...原创 2019-11-26 20:32:32 · 85 阅读 · 0 评论 -
重构-如何编写一段好的代码
关于重构,很多人可能都有惨痛的经验,就不说去阅读别人的代码了,有时候自己写的代码过半年,可能自己都看不明白,这时候再来重构代码是一件很痛苦的事情。其实很多时候面试时会聊到重构的问题,我自己的看法是重构是软件开发中不可缺少的一个环节,并不是说需要重构的代码都是坏代码,有时候是旧的代码架构不能适应新的需求,而有时候是为了新技术的使用。今天来说一下在代码重构中的一个技巧,如何编写一段...原创 2019-11-21 23:05:46 · 285 阅读 · 0 评论 -
递归和迭代
斐波那契函数为例:递归 | | 栈 | | :(重复多次调用程序或函数本身)int fib(int n){if(n>1) return fib(n-1) + fib(n-2);else return n; // n = 0, 1时给出recursion终止条件}递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到...原创 2019-11-21 22:30:02 · 113 阅读 · 0 评论 -
同步和异步区别
同步:同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。异步:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉...原创 2019-11-21 21:52:04 · 125 阅读 · 0 评论 -
为什么选择java?
1.java语言的开源性决定了你学这门语言后你的上限会很高你可以挖到很底层的东西,不会有天花板的存在2。java的GC处理机制 ,也就是垃圾处理机制是我选择java的第二个点。相较于其他语言Java有 自动的垃圾回收机制。3.跨平台的特性,java具有屏蔽当前操作系统和硬件的特性java有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机...原创 2019-11-21 20:30:17 · 226 阅读 · 0 评论 -
java职业规划
据我去了解和从老师那里听到的java大致可以分为 java ee(企业级业务开发)java插件开发 专门开发各种插件互联网开发 比如腾讯阿里这些就是这方面的巨头大数据开发 这是从我Hadop老师那里听来的因为老师的影响,我是想把最终的道路指在大数据开发这条路上的,但是据我了解大数据开发的门槛比较高,所以我想先在javaee这个方面巩固自己提升自己的编程能力 和 编程思维发展成一个比较厉...原创 2019-11-21 19:49:41 · 118 阅读 · 0 评论 -
多线程的匿名或者快捷实现方式
public class A{ public static void main(String [] args){ new Thread(new Runnable(){ @override public void run(){ balabala... //本线程所要执行的方法 } } ).start();...原创 2019-11-08 19:25:10 · 130 阅读 · 0 评论 -
java中break,continue,return使用方法
1、break break :跳出当前循环;但是如果是嵌套循环,则只能跳出当前的这一层循环,只有逐层break才能跳出所有循环;for (int i = 0; i < 10; i++) { if (i == 6) { break; // 在执行i==6时强制终止循环,i==6不会被执行 ...原创 2019-11-04 15:30:11 · 128 阅读 · 0 评论 -
继承的方式创建多线程
/*创建一个子线程,完成1-100 之间自然数的输出。同样地,主线程执行同样地操作创建多线程的第一种方式:继承java.lang.Thread类*///1.创建一个继承于Thread的子类//2.重写Thread类的run()方法。方法内实现此子线程要完成的功能//3.创建一个子类的对象//4.调用线程的star():启动此线程;调用相应的run()方法//5.一个线程只能执行一...原创 2019-10-05 00:47:46 · 277 阅读 · 0 评论 -
Thread类常用的方法
/*Thread()常用的方法:1.start():启动线程并执行相应的run()方法2.run():子线程要执行的代码放入run()方法中3.currentThread():调取当前的线程4.getName():获取线程的方法5.setName():设置此线程的方法6.yield():调用此方法的线程释放当前CPU的执行权7.join():在A线程中调用B线程的join()方法...原创 2019-10-05 01:17:59 · 499 阅读 · 0 评论 -
多线程的创建练习
package day16;public class TestExr1 { public static void main(String[] args) {// Ou o = new Ou();// o.start();// for(int i = 0;i < 100;i++) {// if(i % 2 != 0) {// System.out.println...原创 2019-10-05 01:29:07 · 126 阅读 · 0 评论 -
继承的方式实现多窗口售票
重点:把票 ticket声明为static 使得其成为公用的变量缺点:生命周期过长,占用内存package day171;//模拟火车站售票窗口,开启三个窗口售票class Window extends Thread{ static int ticket = 100; public void run() { while(true) { if(ticket >0) { ...原创 2019-10-05 01:42:53 · 222 阅读 · 0 评论 -
实现的方式创建多线程
//创建多线程的方式二:通过实现的方法/*1.创建一个实现了Runnable接口的类2.实现接口的抽象方法3.创建一个Runnable接口实现类的对象4.将此对象作为形参传递给Thread类的构造器中,创建Thread的对象,此对象为一个线程5.调用stat()方法启动线程并执行run()对比 继承的方式vs实现的方式1.联系:public calss Thread im...原创 2019-10-05 02:02:57 · 87 阅读 · 0 评论 -
用实现的方式实现多窗口售票
package day171;public class TestWindow1 { public static void main(String[] args) { Window1 w = new Window1(); Thread t1 = new Thread(w); Thread t2 = new Thread(w); Thread t3 = new Thread(w)...原创 2019-10-05 02:14:15 · 318 阅读 · 0 评论 -
多线程的概述
原创 2019-10-05 00:46:44 · 91 阅读 · 0 评论 -
IO流练习模仿 Scanner类的实现
package day16;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class MyInput {public String nextString() {InputStreamReader isr = new InputStreamR...原创 2019-10-04 15:24:38 · 253 阅读 · 0 评论 -
RandomAccessFile的使用
/*RandomAccessFile:支持随机访问1.既可以充当一个输入流,有可以充当一个输出流2.支持从文件的开头读取、写入3.支持从任意位置的读取、写入4.r表示只读 rw表示可读可写 w表示只写*/package day16;import java.io.File;import java.io.FileNotFoundException;import java...原创 2019-10-04 14:59:53 · 207 阅读 · 0 评论 -
对象流 序列化 和反序列化
//对象的序列化过程://将内存中对对象通过ObjectOutputStream转换为二进制,、//存储在硬盘文件中//对象反序列化过程:将硬盘中的文件通过ObjectInputStream转换为相应的对象//要实现序列化的类:/*1.要求此类是可序列化的,实现2.要求累的属性同样实现Serializable接口3.提供一个版本号:private static final long...原创 2019-10-04 14:22:33 · 111 阅读 · 0 评论 -
IO的转换流
1、转换流概述OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去2、转换流_字符转字节的过程3、OutputStreamWriter写文本文件a、OutputStreamWriterjava.io.OutputStreamWriter 继承Writer类就是...原创 2019-10-04 13:02:44 · 150 阅读 · 0 评论 -
IO缓冲流
不带缓冲的流的工作原理:它读取到一个字节/字符,就向用户指定的路径写出去,读一个写一个,所以就慢了。带缓冲的流的工作原理:读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次性写出去,从而提高了工作效率优点:减少对硬盘的读取次数,降低对硬盘的损耗。带缓冲的字节输入流:我们知道文件字节输入流读取时,是直接从字节流中读取的。由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。而C...原创 2019-10-03 15:28:08 · 164 阅读 · 0 评论 -
FileReader FileWriter的使用
使用FileReader、FileWriter可以实现文本文件的复制对于非文本文件(视频文件、音频文件、图片),只能使用字节流*/public class TestFileReaderWriter { public static void main(String[] args) { String src = "D:\\python\\神雕侠侣.txt"; String ...原创 2019-09-29 23:26:34 · 171 阅读 · 0 评论 -
创 java 字符串乱码怎么解决?
我尝试了所有的设置编码的方法:1.重新给字符串编码再解码name = URLEncoder.encode(name, “ISO-8859-1”);name = URLDecoder.decode(name, “UTF-8”);2.设置编码name=new String(name.getBytes(),“UTF-8”);3.设置编码//利用getBytes将unicode字符串转成U...转载 2019-09-29 20:50:21 · 363 阅读 · 0 评论 -
使用多线程的优点
问题:只使用单个线程完成多个任务(调用多个方法),肯定比用多个线程来完成用的时间更短,为何扔需要多线程呢?多线程的优点:1.提高应用程序的响应。对图形化界面更有意义,可增加用户体验。2.提高计算机系统CPU的利用率3.改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改java中的线程分为两个类:一种是守护线程,一种是用户线程①他们在几乎每个方面都是相同的,唯一的区别...原创 2019-10-05 13:03:43 · 478 阅读 · 0 评论 -
线程的同步机制 同步代码块synchronized
3.java如何实现线程的安全,线程的同步机制方式一:同步代码块synchronized (同步监视器){//需要被同步的代码块(即为操作共享数据的代码)}1.共享数据:多个线程共同操作的同一个数据(变量)2.同步监视器:由一个类的对象来充当。那个线程获取此监视器,谁就执行大括号里被同步的代码,俗称锁要求:所有的线程必须公用同一把锁注:在实现的方式中,考虑同步的话,可以使用t...原创 2019-10-06 11:28:24 · 214 阅读 · 0 评论 -
遍历集合的方式
import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Iterator;import org.junit.Test;//使用增强for循环实现数组的遍历 @Test public void test() { String[] str = new...原创 2019-09-23 23:16:21 · 129 阅读 · 0 评论 -
TCP通信的客户端代码实现
/**@author 许泽鑫@data 2019/10/11 - 14:47TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据表示客户端的类:java.net.Socket:此类实现客户端套接字.套接字是两台机器间通信的端点套接字:包含了IP地址和端口号的网络单位构造方法:Socket(String host,int port):创建一个流套接字并...原创 2019-10-11 15:33:25 · 181 阅读 · 1 评论 -
SimpleDateFormat类
package day18;import org.junit.Test;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/** * @author 许泽鑫 * @data 2019/10/10 - 19:58 * java.text.SimpleD...原创 2019-10-10 20:52:38 · 109 阅读 · 0 评论 -
StringBuffer与StringBuilder的使用
/**@author 许泽鑫@data 2019/10/10 - 19:21java.lang.StringBuffer 可变字符序列总结:添加append(String 和各种基本类型)插入:insert(int index,String str)反转:reverse():反转此StringBuffer查:charAt(int t)删除:delete(int i,int j)...原创 2019-10-10 19:48:38 · 126 阅读 · 0 评论 -
String与包装类_字节数组_字符数组间的转换
/**@author 许泽鑫@data 2019/10/10 - 16:301.字符串与基本数据类型、包装类之间转换①字符串 -->基本数据类型、包装类:调用相应的包装类的parseXXx(String str)②基本数据类型、包装类 -->字符串:调用字符串的构造器3.字符串与字符数组间的转换①字符串---->字符数组,调用字符串的toCharArray()*...原创 2019-10-10 19:18:24 · 143 阅读 · 0 评论 -
java中怎么把string数组转成string
public static void main(String[] args) {//第一种:String [] arr = {“41”,“a”,“5”,“g56”};String s1 = Arrays.toString(arr);System.err.println(s1);//[41, a, 5, g56]//第二种:String s2 = StringUtils.join(arr...原创 2019-10-10 16:12:25 · 10016 阅读 · 0 评论 -
涉及String类笔试的练习
import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @author 许泽鑫 * @data 2019/10/9 - 16:36 */public class StringDemo { public static void main(String[] args) {...原创 2019-10-10 16:10:28 · 125 阅读 · 0 评论 -
String类的常用方法
/** public int length()* public char charAt(int index):返回在指定index位置的字符。index从0开始* public boolean equals(Object anObject):比较两个字符串是否相等。相等返回true.否则返回-1* public int compareTo(String anotherString)* p...原创 2019-10-09 16:29:02 · 128 阅读 · 0 评论 -
生产者消费者例题
生产者/消费者问题生产者将产品交给电员(Clerk)而消费者从电源处取走产品店员最多只能拥有20个产品如果有空位通知生产者再生产,没有产品通知消费者等一下有产品再通知消费者取走分析:1.是否涉及到多线程的问题?是!生产者、消费者2.是否涉及到共享数据?有!考虑线程的安全3.此共享数据是谁? 产品的数量4.是否涉及到线程的通信呢?存在着生产者消费者的通信*/pu...原创 2019-10-08 18:12:57 · 343 阅读 · 0 评论 -
关于synchronized()方法中ava.lang.IllegalMonitorStateException的异常处理
ava.lang.IllegalMonitorStateException异常主要指notify() notifyAll() wait()的 异常这些方法的是锁的对象的方法即 class(A){synchronized(this)notify();notifyAll();wait();}这个类的这些方法前面默认 加了this而在别的类中用这个类当锁则需明确地指出 这个类。...原创 2019-10-08 18:05:39 · 496 阅读 · 0 评论 -
死锁的问题
//死锁的问题:处理线程同步时容易出现//不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,//就形成了线程的死锁//存在两把或者两把以上的锁public class TestDeadLock { StringBuffer sb1 = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); p...原创 2019-10-08 14:48:26 · 117 阅读 · 0 评论