
JavaSE
糊糊67
求知若饥,虚心若愚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
类加载器和双亲委派模型
一、ClassLoader类加载器分为四类:Bootstrap(启动类加载器):这个类加载器使用C++实现,是虚拟机自身的一部分;其他的类加载器都由Java语言实现,独立于JVM外部并且都继承于java.lang.ClassLoader.BootStrap类加载器负责将存放于<Java_HOME>\lib目录中(或者被-Xbootclasspath参数指定路径中)能被虚拟机识别的...原创 2020-03-29 15:11:32 · 271 阅读 · 0 评论 -
多线程实现共享数据的方式
1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计4个线程。其中两个线程每次对j增加1,另外两个线程对j每次减1,银行存取款有两种方法来解决此类问题:将共享数据封装成另外一个对象,然后将这个对象逐一传递给各个Runnable...转载 2019-11-24 11:45:39 · 1141 阅读 · 0 评论 -
Comparable和Comparator的区别
Comparable,java.lang包下的类其中只有一个函数:public int compareTo(T o);在集合内部定义的方法实现的排序,若一个类实现了comparable接口,则意味着该类支持排序。如String、Integer自己就实现了Comparable接口,可完成比较大小操作。在这里插入代码片Comparator,java.util包下的类常用的俩个函数:bool...原创 2019-11-17 09:15:54 · 335 阅读 · 0 评论 -
volatile型变量的特殊规则
第一、保证此变量对所有线程的可见性,这里的"可见性"是指 : 当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。而普通变量做不到这一点,普通变量的值在线程间传递均需要通过主内存来完成。例如:线程A修改一个普通变量的值,然后向主内存进行回写,另外一条线程B在线程A回写完成之后再从主内存进行读取操作,新值才会对线程B可见。volatile变量在各个线程中是一致的,但是volatile...原创 2019-11-08 21:11:57 · 386 阅读 · 0 评论 -
JVM内存结构和JMM内存模型
1 Java内存区域Java运行时数据区域包括:线程私有区域和线程共享区域1.1 线程私有区域(1)程序计数器程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。如果当前线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是一个Native方法,这个计数器值为空。程序计数器内存区域是唯一一个在JVM规范中没有...原创 2019-11-08 21:24:15 · 633 阅读 · 0 评论 -
Java守护线程和用户线程
1.守护线程是一种特殊的线程,它属于是一种陪伴线程。2. java 中有两种线程:用户线程和守护线程3.可以通过 isDaemon() 方法来区别它们:如果返回 false ,则说明该线程是“用户线程”;否则就是“守护线程”。4.典型的守护线程就是垃圾回收线程。只要当前JVM进程中存在任何一个非守护线程没有结束,守护线程就在工作;只有当所以非守护线程结束时,守护线程才会随着JVM一同停止工作...原创 2019-03-01 20:34:35 · 383 阅读 · 0 评论 -
Java线程池
线程池的优点降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗。提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性:使用线程池可以统一进行线程分配、调度和监控。一、线程池的实现原理1. 线程池的处理流程是否满等价于是否都在执行任务2.ThreadPoolExecutor执行execute()方法的流程二、线程池的使用1. ...原创 2019-10-30 14:41:30 · 146 阅读 · 0 评论 -
synchronized 处理同步问题
所谓的同步指的是所有的线程不是一起进入到方法中执行,而是按照顺序一个一个进来synchronized同步处理1.使用同步代码块 : 如果要使用同步代码块必须设置一个要锁定的对象,所以一般可以锁定当前对象:this同步虽然可以保证数据的完整性(线程安全操作),但是其执行的速度会很慢public class TestThread5 { public static void main(S...原创 2019-03-02 10:38:28 · 793 阅读 · 0 评论 -
Java多线程之停止wait 和唤醒notify
一、wait()方法就是使线程停止运行。方法wait()的作用是使当前执行代码的线程进行等待,wait()方法是Object类的方法,该方法是用来将当前线程置入“预执行队列”中,并且在wait()所在的代码处停止执行,直到接到通知或被中断为止。wait()方法只能在同步方法中或同步块中调用。如果调用wait()时,没有持有适当的锁,会抛出异常。wait()方法只能在同步方法中或同步块中调用...原创 2019-03-03 17:52:13 · 1691 阅读 · 0 评论 -
Java中出现阻塞的情况
Java中出现阻塞的情况线程调用 sleep方法,主动放弃占用的处理器资源。线程调用了阻塞式IO方法,在该方法返回前,该线程被阻塞。线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。线程等待某个通知。程序调用了 suspend方法将该线程挂起。此方法容易导致死锁,尽量避免使用该方法...原创 2019-03-09 20:15:58 · 745 阅读 · 0 评论 -
Java多线程的操作,比如yield方法
使用Thread(变成卖各自的票)或者是Runnable(只卖10张票)实现线程的共享一、线程的命名与取得public class TestThread14 { public static void main(String[] args) { MyThread6 mt=new MyThread6(); // 没有设置名字,会自动分配一个线程名字 ...原创 2019-03-01 18:32:23 · 6203 阅读 · 2 评论 -
Java线程的三种停止方法
一、阻塞中断和非阻塞中断interrupt()方法是给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态,只是改变中断状态而已,它不会中断一个正在运行的线程。简单来说,一个线程在运行状态中,其中断标志被设置为true之后,一旦线程调用了wait、join、sleep方法中的一种,立马抛出一个InterruptedException,且中断标志被程序会自动清除,重新设置为false。...原创 2019-03-01 19:41:33 · 8291 阅读 · 0 评论 -
Java线程的优先级
public class TestThread3 {public void code1(){ //1.主线程的优先级,中等优先级5 // System.out.println("主线程的优先级"+Thread.currentThread().getPriority()); //2.在主线程中创建一个线程,未指定优先级 lamda表达式 Thread threa...原创 2019-03-01 20:17:55 · 229 阅读 · 0 评论 -
Java三大类之Object类
Object是Java默认提供的一个类,Java中的类默认继承的是Object类,所有类的对象都可以使用Object进行接收。一、获取对象信息//该方法的核心是取得对象信息//如若觉得默认给出的toString()方法功能不足,就在需要的子类上覆写toString()方法。public String toString()//对象比较public boolean equals(Objec...原创 2019-10-22 11:15:26 · 215 阅读 · 0 评论 -
Java实现多线程的三种方法
Thread类的核心功能是进行线程的启动一、继承Thread类实现多线程public class TestThread10 { public static void main(String[] args) { MyThread1 myThread1 = new MyThread1("thread1"); MyThread1 myThread2 = new...原创 2019-02-25 23:26:43 · 500 阅读 · 0 评论 -
容易出错的static代码块的执行顺序
1、构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块2、静态构造块(1)静态块优先于构造块执行。(2)无论产生多少实例化对象,静态块都只执行一次非主类的静态块在主类中的静态块(1)在主类中定义的静态块,优先于主方法(main)执行注执行顺序:(1)先执行父类静态块(2)先执行子类静态块(3)执行父类构造块、构造方法(4)执行子类构造块、构造方法...原创 2019-02-04 11:15:32 · 353 阅读 · 0 评论 -
Java中的闰年问题
闰年:能被4整除不能被100整除,或者能被400整除原创 2019-01-29 19:40:55 · 883 阅读 · 0 评论 -
static成员和非static成员
1.静态成员(1)所有的static方法不允许调用非static定义的属性或方法,因为静态函数成员属于类的成员(2)描述共享属性,只需在属性前添加static关键字即可,创建一个类的多个实例,其static常量占同一个存储区域(3)访问static属性(类属性)应使用类名称.属性名(4)static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行该数据区的访问2.非静态...原创 2019-02-02 23:34:55 · 695 阅读 · 0 评论 -
JavaSE总结
Java继承关系原创 2019-10-19 20:44:56 · 400 阅读 · 0 评论 -
Java对象内存分析
只要出现了关键字new,就开辟了内存,如果将一个对象赋值给另一个对象,那么它们所指的是同一个内存地址,如果其中一个改变另一个也会改变,在Java中,所谓的性能调优,调整的就是内存问题栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用堆内存的地址,可以简单的理解为对象的名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会为这个线程创建一个对应的...原创 2019-02-02 16:34:46 · 359 阅读 · 0 评论 -
数组初始化、复制、排序、填充、数组相等判断等操作
1、System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);2、数组拷贝: java.util.Arrays.copyOf(源数组名称,新数组长度)原创 2019-02-01 17:46:19 · 261 阅读 · 0 评论 -
Java中break语句、continue语句
一、break语句1.不带标签的break(1)跳出最近的一个循环 ,提前结束循环,接着执行循环语句后面的语句2.带标签的break(1)用于跳出由标签标记的语句或者语句块(2)标签是一个标识符,break后面带一个冒号,置于语句或语句块之前(3)带标签的break语句跳转到的目标标签只能指向包含break语句的外层语句块二、continue语句1.不带标签的continue(1...原创 2019-01-30 00:57:11 · 499 阅读 · 0 评论 -
Java中switch语句、for语句、foreach语句
1、switch语句(1)switch(数字|枚举|字符|字符串)(2)case控制表达式只能允许整数类型(int、byte、short)、字符类型、枚举类型,case标签后的常量表达式只能为常数或常量,不能为变量2、for语句**for(表达式1;表达式2;表达式3)注:表达式1和3以省略在程序中说明,但是表达式2不能省略,否则程序认为循环条件一直为真会出现死循环;如果三个表达式都省略...原创 2019-01-29 23:15:10 · 1130 阅读 · 0 评论 -
Java运算符、运算符优先级
一、运算符 算数运算符(1)自增自减运算符:注意前缀和后缀,是使用之前还是使用之后(2)一元“+”和“-”运算符:前者的结果是数值本身,后者的结果是数值的相反数(3)取模运算符 double a=14.0%3.0;//2.0 double b=-14.0%3.0;//-2.0 double c=-14.0%-3.0;//-2.0(4)四则运算符“+” ,“-”, “*”, “...原创 2019-01-28 21:52:01 · 712 阅读 · 0 评论 -
Java文件名和类名的关系、类型转换
有很多初学者一直有一个疑惑那就是Java中的类名和文件名是可以随便起的吗?I want to say no .(1)如果文件中只有一个类,那么Java保存的文件名必须和类名一致(2)如果文件中不止一个类,此时看有没有public类,若有的话必须与public类名保持一致;若没有public类,文件名可以与任一类名一致...原创 2019-01-26 23:07:46 · 1222 阅读 · 0 评论 -
Java中存在i-1>i的数吗?
首先存在原创 2019-01-28 23:07:26 · 880 阅读 · 0 评论 -
Java标识符、命名规则、数据类型、变量、常量
1、标识符标识符由数字、字母、“_”、$ 组成,不能以数字开头,“$”不能在代码块中出现2、命名规则:(1) 包:全部小写,单词之间用(.)分隔,最后别忘了分号(2) 常量:全部大写,单词之间用下划线分隔(3) 类、接口:使用大驼峰命名规则,每个单词首字母大写(4) 参数名、变量、方法名:小驼峰命名规则,如果只含有一个单词,则全部小写;如果变量名由多个单词组成,则从第二个单词开始,每个...原创 2019-01-26 22:09:22 · 417 阅读 · 0 评论 -
Java基本概念
Java与c++等编译执行语言不同,Java是解释执行语言,Java源代码首先编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现&amp;amp;quot;一次编译,到处执行&amp;amp;quot;的跨平台特性。 有很多初学者一直有一个疑惑那就是Java中的类名和文件名是可以随便起的吗?I want to say no .(1)如果文件中只有一个类,那么Java保存的文件名必须和类名一致(2)如果文件中不止...原创 2019-01-24 17:49:17 · 190 阅读 · 0 评论 -
Java反射与类操作
java是一个纯面向对象语言,反射也是一个自醒,获取类的信息反射指的是对象的反向处理操作,在正常情况下我们是通过包名.类名找到类,而“反”则是通过Object的方法public final native Class&amp;lt;?&amp;gt; getClass();返回一个Class类对象//反向操作Date date1 =new Date();Class cla= date1.getClass...原创 2019-03-09 22:31:20 · 190 阅读 · 0 评论 -
俩种输入流: BufferedReader类和java.util.Scanner类
BufferedReader类BufferedReader类属于一个缓冲的输入流,而且是一个字符流的操作对象。在java中对于缓冲流也分为两类:字节缓冲流(BufferedInputStream)、字符缓冲流(BufferedReader)//利用BufferedReader实现键盘输入public class TestPrintf { public static void mai...原创 2019-02-12 18:43:47 · 333 阅读 · 0 评论 -
系统输出流、 系统输入流
在System类中定义了三个操作的常量。标准输出(显示器) : public final static PrintStream out错误输出 : public final static PrintStream err标准输入(键盘):public final static InputStream in一、系统输出流系统输出一共有两个常量:out、err,并且这两个常量表示的都是Pr...原创 2019-02-12 18:01:24 · 560 阅读 · 0 评论 -
Java字节流、字符流、AutoCloseable自动关闭支持、转换流
1.字节流是原生的操作,而字符流是经过处理后的操作2.对于IO操作属于资源处理,所有的资源处理操作(IO操作、数据库操作、网络)最后必须要进行关闭。3.字符流适合处理中文,字节流适合处理一切数据类型一、字节输出流OutputStream实现程序输出内容到文件的处理接收File类(覆盖):public FileOutputStream(File file) throws FileNot...原创 2019-02-11 18:58:51 · 1217 阅读 · 2 评论 -
Java File文件操作类
1.输入流输出流2.字节流字符流节点流原创 2019-02-11 16:17:28 · 190 阅读 · 0 评论 -
Lambda表达式
要想使用函数式编程有一个前提:接口必须只有一个方法使用 @FunctionalInterface 注解范例一:@FunctionalInterface//是一个函数式编程接口,只允许有一个方法interface M { public void print();}public class Lambda1 { public static void main(String...原创 2019-02-10 18:29:08 · 359 阅读 · 0 评论 -
Java三大特性之枚举、注解
真正原创 2019-02-10 00:55:34 · 658 阅读 · 0 评论 -
Java三大特性之泛型
泛型指的就是在类定义的时候并不会设置类中的属性或方法中的参数的具体类型,而是在类使用时再进行定义,不能使用基本类型泛型类如果要想进行这种泛型的操作,就必须做一个类型标记的声明。范例:泛型类的基本语法尖括号 <> 中的 T 被称作是类型参数,用于指代任何类型。实际上这个T可以任意写,但出于规范的目的,Java还是建议我们用单个大写字母来代表类型参数。常见的如:T 代表一般的任...原创 2019-02-09 21:59:40 · 756 阅读 · 0 评论 -
Java三种设计模式之工厂设计模式
开闭原则(OCP):一个软件实体如类、模块和函数应该对扩展开放、对修改关闭一、简单工厂模式一个抽象产品类具体产品类一个工厂优点:简单易于实现,把类的实例化交给工厂,易于解耦缺点:添加具体产品需要修改工厂违反OCP开放封闭原则interface IM1 { void computer();}class computer implements IM1 { ...原创 2019-10-12 18:33:38 · 265 阅读 · 0 评论 -
方法的覆写(重写)和重载
方法覆写覆写又叫重写,建立在继承的关系上,继承父类的方法就是通过对父类方法的重写来实现的,调用的时候调用的是覆写过的方法,如果要使用父类的方法使用super.方法名(参数列表)。如果父类的方法是private类型则不可能被重写,子类看不到这个方法,如果在类中也有这个方法只能是重新定义了一个方法,不会达到重写的效果被覆写的方法不能拥有比父类方法更为严格的访问控制权限private>de...原创 2019-09-25 18:00:09 · 1965 阅读 · 0 评论 -
Java继承关系
面向对象的第二特征:继承子类也称为派生类,父类称为超类当发生了类继承关系之后,子类可以直接继承父类的操作,会继承父类的所有结构。(包含私有属性、构造方法、普通方法)子类最低也维持和父类相同的功能。子类可以进行功能的扩充。例如:扩充属性和方法。继承的主要作用:是对类进行扩充以及代码的重用。子类对象在进行实例化前一定会首先实例化父类对象,默认调用父类的构造方法,先看父类的构造方法。注意是构造...原创 2019-09-25 16:54:20 · 170 阅读 · 0 评论 -
JavaSE之静态内部类 、实例内部类 、方法内部类 、匿名内部类、成员内部类
1.嵌套顶级类类中的嵌套类前面加static(1)该类属于类的静态成员,与具体的对象实例无关;(2)该类的成员方法可以直接访问其顶级类的所有静态成员,但不能访问非静态成员;(3)在顶级类中,可直接声明并创建其嵌套顶级类的对象实例;其他类中:顶级类名.嵌套顶级类名 嵌套顶级类对象=new 顶级类名.嵌套顶级类名()2.实例内部类类中的嵌套类前面没有加static(1)实例内部类的成员方...原创 2019-02-03 23:36:07 · 271 阅读 · 0 评论