![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 57
漠然oc
Hello World!
展开
-
javap进行反编译
进入到Java文件目录下编译该文件:javac -encoding UTF-8 xxx.java这时候,该目录会有一个xxx.class编译后的字节码文件;再执行:javap -p xxx.class如果想看更加详细的反编译可执行:javap -c xxx (这里不要写文件后缀.class)反编译可以输出常量池的信息以及元素个数:javap -verbose xxx.class...原创 2020-07-28 20:28:05 · 295 阅读 · 0 评论 -
反射-动态增大数组空间
Arrays类中的copyOf()方法允许动态的创建数组,可增大数组空间int[] a=new int[100];a=Arrays.copyOf(a, 2*a.length);//增大数组空间copyOf()方法有两种类型,一种是int型数组,另一种是泛型数组,可适用任意变量类型的数组 下面是其源代码public static int[] copyOf(int[] original, int n原创 2017-05-05 19:20:51 · 484 阅读 · 0 评论 -
反射初步
在面向对象的世界里,万物皆对象。类是对象,类是java.lang.Class类的实例对象。另外class类只有java虚拟机才能new出来。任何一个类都是Class。 类的实例对象。这实例对象有三种表达方式:Class s1=Class.forName("com.lmr.invoke.Student");Class s2=Student.class;Student s=new Student();原创 2017-05-05 19:19:17 · 242 阅读 · 0 评论 -
Annotation-注解初步
注解:Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法JDK自带注解 @Override 标识该方法是覆盖了父类中的方法 @Deprecated 标识该方法已过时 @Suppvisewarnings 忽略某种警告自定义注解:使用@interface关键字定义注解成员以无参无异常方式声明可以用default为成员指定一个默认值成员的类型是受限的,合法的类型包括原始原创 2017-05-09 16:00:13 · 231 阅读 · 0 评论 -
Java刷题
链接:https://www.nowcoder.com/questionTerminal/af8cf04602e045958d13d16d20a1bf02来源:牛客网Test.main() 函数执行后的输出是()public class Test { public static void main(String [] args){ System.out.pr...原创 2018-06-24 17:11:17 · 2802 阅读 · 0 评论 -
Java基础
接口,比抽象类还要抽象的类。 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract (只能是 public abstract,其他修饰符都会报错)。 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误),此时已经为常量了。 接口中的方法...原创 2018-06-25 09:11:53 · 108 阅读 · 0 评论 -
volatile
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。 而对该变量的修改,volat...原创 2018-06-25 09:15:53 · 404 阅读 · 0 评论 -
Java对象,对象引用,参数传递
在Java中,万物皆对象!比如定义一个学生类public class Student { private int id; private String name; private int age; public Student() { // TODO Auto-generated constructor stub su...原创 2018-07-01 19:45:46 · 3675 阅读 · 0 评论 -
ArrayList源码解析
继承体系 ArrayList主要是继承自AbstractList抽象类并实现了List接口、实现了Cloneable和Serializable接口使得ArrayList具有克隆和序列化的功能、实现了RandomAccess接口以实现随机访问的功能。public class ArrayList<E> extends AbstractList&am原创 2018-07-02 21:18:26 · 139 阅读 · 0 评论 -
HashMap源码解析
继承体系HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。HashMap 的实例有两个...原创 2018-08-27 16:51:28 · 426 阅读 · 0 评论 -
快速失败和安全失败
快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的结构进行了修改(增加、删除),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果结构发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next...原创 2018-07-10 10:16:04 · 200 阅读 · 0 评论 -
JVM垃圾回收机制
如何判断对象是否存活GC动作发生之前,需要确定堆内存中哪些对象是存活的,一般有两种方法:引用计数法和可达性分析法。引用计数法在对象上添加一个引用计数器,每当有一个对象引用它时,计数器加1,当使用完该对象时,计数器减1,计数器值为0的对象表示不可能再被使用。引用计数法实现简单,判定高效,但不能解决对象之间相互引用的问题。可达性分析法通过一系列称为 “GC Roots” 的...原创 2018-07-23 15:10:46 · 160 阅读 · 0 评论 -
synchronized与lock
Java存在两种锁机制:synchronized和locksynchronized介绍synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,通过对对象的头文件来操作,从而达到加锁和释放锁的目的。当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。通常,对于synchronize(lock){…}这...原创 2018-08-30 20:10:59 · 251 阅读 · 0 评论 -
HashMap和TreeMap
映射表Map是用来存放键/值对的一种数据结构,只要知道键,就可以查到对应的值。 Map有两个通用的实现:HashMap和TreeMap。 其中散列映射表对键进行散列,树映射表用键的整体顺序对元素进行排序,并将其组织成搜索树。散列或比较函数只能作用于键。 键必须是唯一的。如果对用一个键两次调用put方法,第二个值就会取代第一个值。 Map有三个视图:键集[Set keySet()]、值集合[C原创 2017-03-26 21:19:44 · 393 阅读 · 0 评论 -
Collection和Array转换
数组转换为集合private static void initArrayToCollection() { // TODO Auto-generated method stub String[] a=new String[10]; for(int i=0;i<10;i++){ a[i]=String.valueOf((char)('A原创 2017-03-26 21:20:48 · 2605 阅读 · 0 评论 -
Comparable和Comparator
Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Compa原创 2017-03-26 21:17:19 · 202 阅读 · 0 评论 -
Java实现JTable放置任意组件
要想在Table中某一行放置任意组件,要使用TableCellRenderer(单元格渲染器)接口和TableCellEditor(单元格编辑器)接口例如:在某一行放置JLabel组件,首先创建MyLabelRendererimport java.awt.Component;import java.awt.Image;import java.net.URL;import javax原创 2016-12-01 16:49:26 · 1475 阅读 · 0 评论 -
JTable中添加组件后,改变当选中时的背景色
在JTable中添加组件后,当我们选中某一行时,我们会发现其他栏的背景色会变为table设置的选中背景色,而带有组件的那一栏背景色却不变这时,我们需要在TableCellRenderer中添加一个填充方法下面以JLable组件为例:import java.awt.Component;import java.awt.Image;import java.net.URL;import原创 2016-12-02 16:24:46 · 1652 阅读 · 0 评论 -
Java实现进度条JProgressBar设置颜色,变色进度条
如果程序中没有加载其他界面风格主题,进度条的颜色很容易修改,直接setBackground()bar.setBackground(Color.WHITE);bar.setForeground(Color.BLACK);最近做项目遇到一个问题,由于项目程序中加载了setBackground()失效了。我查了一下API,重写了JProgressBar中的setUI()方法,自己重新定义了一个原创 2016-12-02 16:54:23 · 10203 阅读 · 2 评论 -
获取路径
package com.inputoutput.test;import java.io.File;import java.io.IOException;public class TestPath { public static void main(String[] args) { String rootPath = Class.class.getClass().getResou原创 2016-11-21 09:31:05 · 269 阅读 · 0 评论 -
Java实现线程
Java实现线程,一种是继承Thread类,一种是实现Runnable接口一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务而且Runnable接口可以避免单继承的局限,且更适合与资源共享Thread t=new Thread(){ @Override public void run() { // TODO Auto-generated method原创 2017-02-22 20:04:27 · 450 阅读 · 0 评论 -
Java中Synchronized关键字
synchronized是Java中的关键字,是一种同步锁,保证在同一时刻最多只有一个线程执行该段代码。它修饰的对象有以下几种: 一、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 二、修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 三、修改一个静态的方法,原创 2017-02-22 21:34:00 · 575 阅读 · 0 评论 -
多线程中的wait()和notify()方法
wait()和notify()方法属于Object类中的方法,是用于对线程之间进行资源对象锁的通信,其必须在synchronized(Obj){...}语法块内wait()就是说线程在获取对象锁后,主动释放对象锁,同时本线程进行休眠。直到有其它线程调用该对象的notify()唤醒该线程,才能继续获取对象锁,并继续执行notify()就是对对象锁的唤醒操作。但有一点需要注意的是notif原创 2017-02-22 22:06:39 · 901 阅读 · 0 评论 -
执行器Executor
线程池thread pool,可减少并发线程的数目 1. 调用Executors类中静态方法newCachedThreadPool或newFixedThreadPool 2. 调用submit提交Runnable或Callable对象(记得保存好返回的Future对象) 3. 当不再提交任何任务时,调用shutdown或shutdownNow shutdown方法启动线程池的关闭序列,被关闭原创 2017-03-16 20:36:47 · 1065 阅读 · 0 评论 -
阻塞队列,阻塞栈
阻塞队列BlockingQueue 阻塞栈BlockingDeque 两者均会自动的平衡负载 以阻塞队列为例:将队列作为线程管理工具来使用,用put方法进行添加线程,take方法取出处于队头的线程。其中,add,remove,element方法会抛出异常 eg:搜索指定目录下所有文件内容,打印出包含指定关键字的行package com.lmr.thread;import java.io.原创 2017-03-16 20:38:04 · 372 阅读 · 0 评论 -
Callable与Future
Callable与Runnable类似,但是有返回值,其接口是一个参数化的类型,只有一个call方法(类似Runnable中的run方法) Future保存异步计算的结果,可以启动一个计算(callable),将Future对象交付给线程即可。当计算结束时,通过get方法获取计算结果。若计算未完成,则调用被阻塞,直到完成。可以通过isDone方法判断计算是否完成。 FutureTask包装器,可原创 2017-03-16 20:48:49 · 237 阅读 · 0 评论 -
序列化Serializable和Externalizable
序列化就是将一个对象(标志对象的类型)及其状态转换为字节码,以文件,内存,数据库等形式保存起来。反序列化就是在适当的时候通过读取这些文件,得到原有状态的对象。 序列化可以通过实现两种接口来实现,即Serializable和Externalizable这两个接口。 Serializable开发相对简单,其读取方式都是但速度慢,而且序列化后的数据文件比较大。eg1:package com.lmr.i原创 2017-03-16 20:50:31 · 404 阅读 · 0 评论 -
I/O Stream输入输出流
I/O中四大流类OutputStream、InputStream、Writer、Reader。InputStream读取数据,OutputStream写入数据。均是面向字节的,字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的。package com.lmr.io;import java.io.File;import java.io.FileInputStrea原创 2017-03-16 21:26:43 · 538 阅读 · 0 评论 -
Iterator和ListIterator
1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。 2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。 3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasP原创 2017-03-26 21:14:12 · 502 阅读 · 0 评论 -
在Eclipse中查看Java类库的源代码
首先要找到JDK安装目录,然后该目录下会有个src.zip文件,这个文件就是Java类库的源代码,我们把它加载到Eclipse中就行了,然后在Eclipse中想查看某个方法或者某个类的源代码,直接选中按F3。下面那个Path就是你所安装JDK目录下的src.zip的路径原创 2016-11-29 22:01:00 · 448 阅读 · 0 评论