
Java基础
FutureFlyme
欢迎加我的微信2515974230,相互交流学习!
展开
-
读写锁的实现
读写锁主要用来解决读-读能共存,读-写不能共存,写-写不能共存的情况,它的使用场景主要是读写分离,比如自己实现一个缓存,在刷新缓存的时候就需要用到读写锁。下面撸上一段代码,简单实现以下。/** * @author Administrator * @date 2019/3/3 */public class Cache { static Map<String,String&...原创 2019-03-03 12:27:44 · 549 阅读 · 0 评论 -
java反射
什么是反射 解析Java类中的各个组成部分映射成一个个java对象。 为什么用反射 多用于框架和组件,写出复用性高的通用程序。 Class类 Class代表的就是字节码文件。获取方式 1、类名.class 2、对象.getClass() 3、Class.forName 开发中建议使用第三种,这种方式耦合度低,没有依赖性 。package cn.itcast.refle...原创 2016-10-19 14:50:59 · 308 阅读 · 0 评论 -
反射实例
利用反射,将map集合中key值与Person类中属性名相同的,用map中key的value对Person类的属性赋值。package cn.itcast.demo;import java.io.Serializable;public class Person { private String name; private String sex; private...原创 2016-10-20 17:15:04 · 385 阅读 · 0 评论 -
两线程间通信
创建两个线程类package Thread01;public class T1 extends Thread{ Printer p; public T1(Printer p){ this.p=p; } public void run(){ while(true){ try { ...原创 2017-02-27 10:55:04 · 373 阅读 · 0 评论 -
多线程通信
多线程通信可以参考两线程间通信 现在要实现aaa bbbbb ccccccc轮询打印package Thread01;public class T1 extends Thread{ Printer p; public T1(Printer p){ this.p=p; } public void run(){ while(...原创 2017-02-27 12:53:16 · 395 阅读 · 0 评论 -
创建线程及线程池
创建线程有两种实现方案 1、创建类实现Runnable接口 2、创建类继承Thread类package Thread03;//1.实现Runnable//定义类实现 Runnable 接口 //实现 run 方法//把新线程要做的事写在 run 方法中//创建自定义的 Runnable 的子类对象mt2 //创建 new Thread(Runnable ) 对象, 传入 m...原创 2017-02-27 16:26:55 · 438 阅读 · 0 评论 -
类的加载
编译的时候是将.java文件编译成.class文件,程序在运行的时候,系统会把.class文件加载到内存中,当系统要使用某个类时,如果该类还没有加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载:就是指将.class文件读入内存,并为之创建一个Class对象,任何类被使用时,系统都会建立一个唯一的Class对象。(Class类就是描述.class文件的) 什么时候...原创 2017-03-01 14:37:13 · 482 阅读 · 0 评论 -
反射使用步骤
步骤1.获取Class对象 四种方式: 1、Class.forName(全类名) 2、类名.class 3、对象.getClass() 4、假如是包装类型,比如Integer,则可以使用Integer.Typepackage Test;public class Person {}package Test;public class Demo01 { pub...原创 2017-03-01 15:02:06 · 467 阅读 · 0 评论 -
内部类
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可以是非static的,可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。那么为什么要使用内部类呢? 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了原创 2017-03-03 15:56:10 · 361 阅读 · 0 评论 -
关于类继承的面试题
package test01;public class Z extends X{ { System.out.print(3); } Y y=new Y(); public Z(){ System.out.print("Z"); } { System.out.print(4); } pub原创 2017-05-22 16:23:41 · 734 阅读 · 1 评论 -
泛型高级——通配符
package cn.itcast.generic;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.TreeSet;import org.junit.Test;public class Demo2 { public void show(Li...原创 2016-10-18 20:05:19 · 720 阅读 · 0 评论 -
java枚举补充
枚举方法 1、枚举类中自带 2、枚举类从java.lang.Enum类继承package cn.itcast.enumdemo;import java.util.Arrays;import org.junit.Test;public class Demo4 { //从父类java.lang.Enum继承的方法 @Test public void demo...原创 2016-10-19 10:21:25 · 324 阅读 · 0 评论 -
java可变参数
可变参数本质上是一个数组;可变参数只能处于参数列表的最后,所以一个方法最多只能有一个长度可变的参数。可变参数后不能再有参数。package cn.itcast.demo2;import java.util.Arrays;import java.util.List;import org.junit.Test;public class demo1 { /** * @...原创 2016-10-18 16:03:15 · 354 阅读 · 0 评论 -
Future模式
Java多线程中,Callable/Future接口是一个非常重要的知识点,我们都知道无论继承Thread类,还是实现Runnable接口,在线程任务执行结束后,都无法获取执行结果,所以Java中提供了Callable、Future接口,Callable的call方法用来执行任务,产出结果,Future的get方法用来获取线程执行的结果。它们的底层使用的其实是Future模式。比如,现在主线程发送...原创 2019-03-02 21:52:28 · 338 阅读 · 0 评论 -
Junit测试
Junit是一个单元测试工具,它可以在没有主方法的情况下,执行某一个方法。 对于被测试的方法要求: 1、被测试的方法不能有参数,不能有返回值。 2、要想使用junit需要导入junit的jar包。 3、对于测试类,必须存在无参构造。 需要使用的一些注解: @Test 测试方法 @Igonre 被忽略的测试方法 @Before 在每个测试方法执行之前都要执行一次。 @After 在...原创 2016-10-18 11:22:45 · 427 阅读 · 0 评论 -
java枚举
枚举是什么? 枚举就是一个特殊的java类,它继承了java.lang.Enum这个类。 枚举的作用 我们在开发中,有些数据必须被限定在某个范围,不可以超出这个范围,此时就需要使用枚举。它能够使我们代码简单,安全。package cn.itcast.enumdemo;public class Demo2 { //使用枚举提供阅读性,提高安全类 public stat...原创 2016-10-19 09:51:58 · 312 阅读 · 0 评论 -
反射(Method类)
Method类代表某个类中的一个成员方法。 反射通过它可以调用某个类中的一个方法。package cn.itcast.reflect1;public class Teacher { public int age=10; private String name="Tom"; public void show() { System.out.p...原创 2016-10-20 14:36:09 · 856 阅读 · 0 评论 -
反射(Field类)
Field类代表某个类中的一个成员变量,并提供动态的访问权限 得到所有的成员变量 Field[] fields = c.getFields(); // 取得所有public属性 Field[] fields = c.getDeclaredFields(); // 取得所有声明的属性 得到指定的成员变量 Field name = c. getField(“name”); Field na...原创 2016-10-19 15:22:41 · 570 阅读 · 0 评论 -
集合遍历
List(有序) 1、Iterator 2、ListIterator 3、普通for 4、增强forpackage cn.itcast.demo1;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;import j...原创 2016-10-18 15:01:01 · 549 阅读 · 0 评论 -
自动装箱与拆箱
Java中的包装类 包装类是对java中的基本数据进行包装,可以将基本类型包装成类型类。 java的基本数据类型: 四类八种 1、整型 byte short int long 2、浮点型 float double 3、字符 char 4、布尔 boolean 包装类 Byte Short Integer Long Float Double Character Boolea...原创 2016-10-18 13:27:49 · 336 阅读 · 0 评论 -
java泛型
什么是泛型? 对数据类型进行限定,应用最多的地方是集合。 为什么要使用泛型? 1、提高程序的安全性 2、将运行阶段的问题在编译阶段解决 3、不用进行类型的强制转换 学习泛型的目的:会使用集合上定义的泛型。 1、集合上泛型的基本使用 2、自定义泛型 在类上或接口上定义泛型 class 类名<> { } interface 接口名<> { } 在...原创 2016-10-18 17:45:53 · 413 阅读 · 0 评论 -
创建对象的四种方式
1、new 2、反射 3、IO流(Object流)—要实现Serializable接口 4、clone()—-需要在类中重写clone()方法实现Cloneable接口package cn.itcast.demo;import java.io.Serializable;public class Person { private String name; pr...原创 2016-10-20 17:07:39 · 1232 阅读 · 0 评论 -
Java中代码块
Java中代码块主要分为四种: 在方法中出现{ }的就是普通代码块 在类中出现的{ }的就是构造代码块 使用static关键字修饰的{}是静态代码块 还有就是线程中使用的同步代码块(synchronized)普通代码块package Test03;public class Demo02 { public static void main(String[] args) {原创 2017-03-03 09:54:58 · 336 阅读 · 0 评论 -
JVM内存空间
大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack ( 本地方法栈 ),其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Me原创 2017-05-30 19:46:08 · 634 阅读 · 0 评论 -
定时器的使用
package Thread01;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TraditionTimerTask { public static void main(String[] args) { new Timer().schedule(原创 2017-03-30 13:02:28 · 392 阅读 · 0 评论 -
多线程和多任务
1、多任务 在计算中,多任务是一种多个任务(也称之为进程)共享处理资源(如CPU)的方法。在多任务操作系统上,例如Windows XP,您可以同时运行多个应用程序(下载电影,玩游戏)。多任务实质是指操作系统在每个计算任务间快速切换,以致于看上去不同的应用似乎在同时执行多项操作。当CPU时钟频率稳步提高时,不仅应用程序的运行速率可以更快,而且操作系统在应用间的切换速率也更快。这样就提供了更好原创 2017-03-29 10:31:24 · 1927 阅读 · 0 评论 -
抽象类和接口的区别
1、抽象类可以有构造方法,接口中不能有构造方法 2、抽象类中可以有普通成员变量,接口中没有普通成员变量 3、抽象类中可以包含非抽象的普通成员方法,接口中所有的方法必须都是抽象的,接口中不能包含非抽象的普通方法 4、抽象类中的抽象方法访问类型可以是public、protected、private,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型 5、抽原创 2017-03-04 09:45:05 · 363 阅读 · 0 评论 -
List Queue Map Stack的遍历
package Test01;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListDemo01 { public static void main(String[] args) { List<String>list=new ArrayList原创 2017-03-05 20:15:07 · 455 阅读 · 0 评论 -
i=i++问题
看下面一道面试题package Test01;public class Demo02 { public static void main(String[] args) { Demo02 demo02=new Demo02(); int i=0; int j=0; demo02.show(i);//1 System原创 2017-03-05 16:11:59 · 433 阅读 · 0 评论 -
java数据类型的自动提升
一道面试题:package Test01;public class Demo01 { public static void main(String[] args) { byte b1=1,b2=2,b3,b6; final byte b4=4,b5=6; b6=b4+b5;//1 b3=(b1+b2);//2 S原创 2017-03-05 09:34:19 · 554 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
参考链接转载 2017-03-17 16:28:13 · 323 阅读 · 0 评论 -
Integer与int
下面是一道面试题:package Test05;public class Demo02 { public static void main(String[] args) { Integer a1=59;//1 int a2=59;//2 Integer a3=Integer.valueOf(59);//3 Integer a4=原创 2017-03-04 15:32:32 · 432 阅读 · 0 评论 -
多态特性
面向对象的三大特性:封装,继承,多态,其中封装和继承是多态的基础概述:某一个事物,在不同时刻表现出来的不同状态,父类的声明指向子类的实现,父类可以调用子类重写后的方法。转型操作: 向上转型:父类的声明指向子类的实现向下转型: 假如子类声明指向父类实现,这是非法的。如果将父类型声明数据赋值给子类型,不管父类真实类型是什么,都是非法的。那么应该怎么办呢?可以使用强转语法。子类类型声明 对象名 = (子原创 2017-03-02 20:28:03 · 407 阅读 · 0 评论 -
内部类
1、为什么java的非静态内部类中不能有static属性,却能有static final属性?package Thread01;public class Test01 { public class Inner{ //static int a=1; final static int b=1; }}java类加载顺序,首先加载类,执行static变量原创 2017-03-30 16:31:37 · 466 阅读 · 0 评论 -
ThreadLocal
ThreadLocal用于实现线程内数据的共享,即对于相同的代码程序,多个模块在同一个线程中运行时共享一份数据,而在另外线程中运行时又共享另外一份数据 每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map中增加一条记录,key分别是各自的线程,value为各自的set方法传进去的值,在线程结束是可以调用ThreadLocal.clear()方法,这样会释放内存,不调用也原创 2017-03-31 10:43:54 · 459 阅读 · 0 评论 -
二叉树的遍历(递归与非递归)
package TreeNodePack; import java.util.Stack; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c){ date=c;原创 2017-04-10 10:43:58 · 374 阅读 · 0 评论 -
String类型编译器优化
package test01;public class test02 { private static final String MESSAGE="taobao"; public static void main(String[] args) { String a="tao"+"bao"; String b="tao"; String原创 2017-03-17 09:34:51 · 1154 阅读 · 0 评论 -
CyclicBarrier、CountDownLatch、Exchanger
CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。CyclicBarrier表示线程相互等待,直到所有线程集合完毕,再继续向下执行,想在什么地方集合就在什么地方await() CountDownLatch就像一个倒计时器,调用CountDownLatch对象的countDown方法就可以将计数器减1,当计数到达0时,则所有等待者或者单个等待者开始执行。可以实现一个原创 2017-04-02 20:33:59 · 359 阅读 · 0 评论 -
Semaphore实现信号灯
Semaphore可以维护当前访问自身线程的个数,并提供了同步机制,使用Semaphore可以控制同时访问资源想线程个数。单个信号量的Semaphore对象可以实现互斥锁功能,并且可以是由一个线程获得了“锁”,在由另外一个线程释放了“锁”。package Thread03;import java.util.concurrent.ExecutorService;import java....原创 2017-04-02 19:13:30 · 383 阅读 · 0 评论 -
Condition
Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。Lock可以实现互斥,但是不能实现同步,Condi...原创 2017-04-02 17:25:31 · 346 阅读 · 0 评论