Java
RHYME_CHIANG
One Thing Remains
展开
-
Java300StudyNote(6)-JVM核心之JVM运行和类加载全过程(1)
1、类加载全过程类加载简图 加载、链接、初始化原创 2017-09-25 23:20:10 · 245 阅读 · 0 评论 -
Java300StudyNote(1)-反射机制-提高反射效率
反射机制的性能问题使用反射机制调用类或调用类的方法会大大的降低程序的执行效率。设置setAccessible(true)可以大大缓解反射带来的效率问题原创 2017-09-17 19:31:41 · 446 阅读 · 0 评论 -
Java300StudyNote(2)反射-常用泛型操作(参数泛型、返回值泛型)
泛型的作用 Java中的泛型采用的是泛型擦除机制。java中的泛型仅仅是给JVM虚拟机使用的,是为了保证数据的安全和免去强制转化的操作。JVM虚拟机在编译的时候会自动的依据泛型进行相应的类型转化操作,但是,在编译完成之后,泛型的影子就全都消失了,你可以这样理解,泛型是一个JVM编译的一个规范,它告诉虚拟机这个地方应该这样编译,这个类型应该这样转化,但它仅仅只是一个编译的规范,并不包含在编译的结原创 2017-09-17 22:47:48 · 317 阅读 · 0 评论 -
Java300StudyNote(7)-JVM核心机制(2)-初始化时机-类的主动引用、被动引用、静态初始化块执行顺序问题
1、类的初始化a、执行类构造器<clinit>()方法的过程,类构造器方法是由编译器自动收集类中的所有变量的赋值动作和静态初始化块中的语句合并产生的 b、初始化一个类的时候,先初始化它的父类 c、虚拟机会保证执行类构造器方法<clinit>()的执行是被正确加锁和同步的,也就是说这个方法是线程安全的2、类的主动引用(一定会发生类的初始化)new一个类的对象调用类的静态成员变量(除了final原创 2017-09-27 00:06:32 · 268 阅读 · 0 评论 -
Java300StudyNote(3)-Java动态编译(DynamicCompile)、动态运行、反射调用mian方法、JavaCompiler.run()空指针问题
Java动态编译与动态运行,如何通过反射调用main方法,JavaComile.run()空指针异常处理,字符串代码动态编译原创 2017-09-19 12:19:25 · 2269 阅读 · 2 评论 -
Java300StudyNote(4)-Java动态性编程之字节码操作
字节码操作字节码操作在现今各大流行框架中都有应用,了解和学会字节码操作对深入了解框架的原理有很大的帮助Java动态性实现的两种方式字节码操作反射字节码操作要比反射占用的系统资源开销要小,执行效率也要高得多,但也并不是说他们谁好谁坏,在实际开发中,他们各有各的好坏。但不管怎么样,他们操作的都是JVM即虚拟机编译好的class文件。字节码操作可以实现的功能动态生成一个新的类动态改变类的结构(原创 2017-09-20 10:20:02 · 538 阅读 · 0 评论 -
Java300StudyNote(5)-Javassist常用API
Javassist常用API原创 2017-09-20 18:29:59 · 531 阅读 · 0 评论 -
面向过程与面向对象的本质区别思考
面向过程与面向对象的本质区别面向对象最大的特点:以对象的方式组织代码,封装数据;上帝视角,从整体上进行设计面向过程最大的特点:流程式的思维,第一步做什么,第二步做什么:局内人沉迷细节看不到全部其实面向对象和面向过程本质上还是一个思维方式的不同,举个例子,我们要造一支铅笔,如果我们采用面向过程的思维方式就是,我要知造成这支笔的每一步具体的细节,从头到尾,按顺序的依次执行下来。而采用面向对象的思维方式就原创 2017-10-07 15:31:30 · 480 阅读 · 0 评论 -
一句话总结:面向对象编程的本质(来自尚学堂Java300)
以类的方式组织代码,以对象的方式封装数据慢慢体会!!!原创 2017-10-07 15:42:45 · 586 阅读 · 0 评论 -
面向对象思考之类和对象的深入思考与理解,那些我们忽略的编程思想
以类的方式组织代码,以对象的方式封装数据类是具体对象的模板,对象是类的具体化我们可以举个简单的例子:在我们的概念里,我们对车的映像是,有四个轮子,有发动机,能跑等等。如果你仔细思考的话,你会发现在我们大多数人的概念里,我们对车的概念都是抽象的,存放在我们脑海中的关于车的概念是我们总结出来的基本上所有的车都有的共性,满足了这个共性,我们就可以把它称作一辆车。我们可以简单理解为在我们的脑海中存在的是关于原创 2017-10-07 16:24:17 · 440 阅读 · 0 评论 -
Java-Classloader-loadeClass(String,boolean)、findClass(String)类加载源码解析
这里为了更好的说明类加载的过程,将部分次要代码删去,若有兴趣,可以自行查看Classloder源码首先我们先来简述一下类加载的过程使用findLoadedClass(name)方法查看该类是否已经被加载如果该类未被加载过,则调用他的父类加载器,这里的父类加载器是扩展类加载器扩展类加载器同样是继承ClassLoader类,因为它存在父类加载器就是引导类加载器,所以在执行loadClass方法时,原创 2017-10-08 10:22:56 · 1211 阅读 · 0 评论 -
Java程序执行内存分析(栈、堆、方法区)
我们结合实际程序例子来对Java程序执行的内存进行分析,以对java语言有个更深的了解注意以下代码和实际逻辑做了一些简化,目的是能够将重点放在内存分析上,把最核心的拎出来Computer类public class Computer { public String brand; public String cpuSpeed;}Student类public class Student原创 2017-10-08 13:31:50 · 820 阅读 · 0 评论 -
Java垃圾回收机制(Garbage Collection)、Java垃圾回收机制与C++垃圾回收机制的区别
Java垃圾回收机制1、当一个对象没有被任何引用的时候,java的垃圾回收机制就会自动回收这些对象。2、程序员可以调用System.gc(),来通知GC(垃圾回收器运行),但是并不会立马运行,就相当于我们通过System.gc()来建议GC运行,但GC具体什么时候运行由他自己说了算3、每个类都有一个finalize()方法,来释放对象的资源,但是不推荐使用,尽量少用Java垃圾回收机制与C++垃圾回原创 2017-10-08 22:46:12 · 1645 阅读 · 0 评论 -
Java static静态属性和静态方法内存分析和注意事项静态方法不能调用非静态属性和非静态方法,普通方法可以调用静态属性和方法
Java static 静态属性和方法1、静态属性和方法从属于类,不从属与对象2、不能在静态方法中调用非静态变量和非静态方法3、可以在普通方法中调用静态属性和方法我们以下面的这个简单的Student类为例public class Student { //普通属性 private String name; //静态属性又称类属性 private static String原创 2017-10-08 23:17:26 · 1012 阅读 · 1 评论 -
Rhyme/关于Java子类不能缩小父类方法可见性的问题
关于Java子类不能缩小父类方法权限的问题public class Farther { protected void run() { System.out.println("我是父类"); }}重写方法的时候扩大了父类的方法可见性,是合法的public class Child extends Farther{ @Override public void r原创 2017-10-09 23:14:33 · 1016 阅读 · 0 评论 -
Java隐式参数this
Java隐式参数this1、每个方法都都会有两个隐式参数一个this,一个super2、在普通方法中this指向调用该方法的对象3、构造方法中this指向正要初始化的对象4、反正不管怎么样,一句话,this指向调用我的那个对象5、this不用用于静态方法,原因很简单,由于static属性和方法从属于类,静态方法中不包含this,super隐式参数,也就是不包含对象的地址信息6、可以用this(参数)原创 2017-10-09 15:25:10 · 948 阅读 · 0 评论 -
Rhyme/Java 继承相较于组合的优势在哪里?
继承相较于组合的优势在哪里?继承和组成除了都能在代码的重用上做出贡献外,而且抛去java单继承的特点,我想说的是,继承也是有他的好处的那就是:继承能够对现实世界更好的建模,继承拥有更好的逻辑性,比如我有一个父类叫动物类,它有很多子类,例如哺乳动物、爬行动物、等等,所以你看通过继承树就能够很好的建模,也更容易理解,但是组合就没有那么直观原创 2017-10-09 23:38:19 · 207 阅读 · 0 评论 -
Rhyme/java 隐式参数super的介绍与继承的内存分析
java 隐式参数super的介绍与继承的内存分析1、super是直接父类的引用,在每个子类的方法中都有两个隐式参数,一个是this,代表对象本身,一个是super代码直接父类对象以下是我们的测试代码:父类Animalpublic class Animal { //动物类型 private String type; //移动方式 public void moveWay()原创 2017-10-09 23:45:37 · 333 阅读 · 0 评论 -
Rhyme/StudyNote Java 继承VS组合,什么时候用继承、什么时候用组合?
继承VS组合1、相同点:都能提高代码的复用性2、什么时候用继承?1、表示is-a关系的时候,例如哺乳动物的父类是动物,因此在对现实世界的建模上,继承更有优势,更直白2、需要发生多态的时候,继承是发生多态的基础3、什么时候用组合?1、表示has-a关系的时候,例如猫有嘴巴,猫有爪子,嘴巴、爪子、和猫的关系就可以用组合来实现原创 2017-10-10 08:48:28 · 413 阅读 · 0 评论 -
Java300StudyNote(7)-Java各版本JavaSE、JavaEE、JavaME
1、JavaSE(J2SE)Java Standard Edition Java标准版 适合个人计算机上的应用2、JavaEE(J2EE)Java Enterprise Edition Java企业版本 适合服务器端的应用3、JavaME(J2ME)Java Micro Edition Java微型版 适合消费性电子产品原创 2017-10-02 13:18:29 · 66506 阅读 · 0 评论 -
Java300StudyNote(8)-快速理解JDK&JRE&JVM
1、JDK&JRE&JVM之间的关系JDK包括JRE和JVM,JRE包括JVM2、JDK英文原意: Java Development kit(工具箱) Java开发者工具包作用: 进行Java程序开发3、JRE英文原意: Java Runtime Environment Java运行时环境作用: 运行Java程序4、JVM英文原意: Java Virtual Machine Java虚拟机作用原创 2017-10-02 13:56:48 · 882 阅读 · 0 评论 -
Java300StudyNote(9)-unicode和GBK,UTF-8,UTF-16,图解各种字符集之间的关系、Java内部使用的字符集、字符集的兼容性问题、乱码问题
图解字符集之间的关系Unicode和GBKJava内部字符集字符集的兼容性问题乱码问题Unicode和UTF-8,UTF-16原创 2017-10-02 15:58:20 · 709 阅读 · 0 评论 -
Rhyme/JavaStudyNote final关键字深入内存分析以及final的注意事项
Java final关键字首先我们只需要知道一点,被final修饰的变量、方法、对象,代表的是它们只能获取指定内存地址中的内容,所以在只要内存地址不改变,这里面的内容是可以改变的。反正记住一句话,final代表的是固定的内存地址所以从内存角度分析就可以很清楚的明白以下final的特性:1、final修饰的变量只能被初始化一次,初始化后不能被修改,这里指的是内存地址不能被改变例如以下代码:2、fina原创 2017-10-10 08:58:47 · 291 阅读 · 0 评论 -
Rhyme/Java中实现封装的方式 访问控制符private、default、protected、public的访问范围
Java中主要是借助访问控制符来进行类的封装,以达到所谓的高内聚、低耦合的目的#表示可以访问 访问符 同一个类中 同一个包中 子类 所有类 private # default # # protected # # # public # # # #原创 2017-10-10 13:42:29 · 342 阅读 · 0 评论 -
Java300StudyNote(10)-Java基本数据类型之整数类型及整数类型表示范围
Java整形常数 整数类型 占用存储空间 表示范围 byte 1字节 (-272^7)~(27−12^7-1)即-128~127 short 2字节 (-2152^{15})~(215−12^{15}-1)即-32768~32767 int 4字节 (-2312^{31})~(231−12^{31}-1)约正负21亿 long 8字节 (-2原创 2017-10-02 22:15:23 · 267 阅读 · 0 评论 -
Java300StudyNote(11)-1张表看懂二进制、八进制、十进制、十六进制
二进制:逢2进位八进制:逢8进位十进制:逢10进位十六进制:逢16进位 二进制 八进制(0) 十六进制(0x或0X) 十进制 0 00 0x0 0 1 01 0x1 1 10 02 0x2 2 11 03 0x3 3 100 04 0x4 4 101 05 0x5 5 110 06原创 2017-10-02 22:37:18 · 404 阅读 · 0 评论 -
Java300StudyNote(12)-Java浮点数以及浮点数误差问题、BigInteger、BigDecimal、float与long谁更大
类型 占用存储空间 表示范围 float 4个字节 -3.403E38~3.403E38 double 8个字节 -1.708E308~1.708E308float 表示的范围要比long要大浮点数使用总结在Java中默认浮点数类型是double,如何要想所表示的浮点数为float,需要在浮点数后加上F由于浮点数的误差问题,所以最好不要使用浮点数来进行比较原创 2017-10-03 13:36:25 · 445 阅读 · 0 评论 -
Rhyme/Java 多态的深入理解—多态的详细分析以及多态应用之钩子函数的详细解释
Java多态的深入理解1、Java面向对象的三大特性:继承、封装、多态2、多态产生的条件:继承、方法重写、父类引用指向子类对象例如以下程序:通过以上程序我们可以了解到多态带给我们的好处,那就是可扩展性很强,想想看如果我还有其他的动物子类,那么我只要再写一个子类继承Animal类即可,而无须修改其他任何代码; 如果和我们现实世界中的待人处事联系起来,多态的道理就是说一套,做一套,说的时候不把话说死,原创 2017-10-10 23:32:44 · 544 阅读 · 0 评论 -
Rhyme/Java 多线程同步之生产者消费者模式
Java 多线程同步之生产者消费者模式1、问题产生背景我们在多线程访问同一份资源的时候,往往会出现线程的同步问题例如,我开了一家包子店,我们都知道必须先有包子,消费者才能消费。那么这里,店家即包子的生产者可以理解为一个线程,喜欢吃包子的消费者是另一个线程,这两个线程都访问同一份资源包子。现在,我们先假设没有多线程同步控制的情况,这个时候就相当于消费者线程和店主线程是没有所谓的先后顺序的,我们的CPU原创 2017-10-19 18:09:17 · 353 阅读 · 0 评论 -
深入类加载器-类加载器作用,类缓存、类加载器的层次结构、ClassLoader类介绍、代理模式之双亲委派机制
1、类加载器的作用类加载器的作用是将class字节码文件加载到内存中,并将这些静态数据转化为方法区中的运行时数据结构,同时在堆中生成代表这个类的java.lang.Class对象,作为访问方法区中数据的入口。2、类缓存标准的Java SE类加载器可以按要求查找指定的类,但是一旦某个类被加载到指定的类加载器中,它将维持一段时间,不过,JVM垃圾回收机制可以回收这些Class对象,简单的说,类在被回收前原创 2017-10-04 15:53:21 · 1051 阅读 · 0 评论 -
Java基本数据类型——Java基本数据类型汇总、自动类型转换(指导图)、强制类型转型乱码问题、运算时类型提升容易犯的错误常见问题汇总
1、Java基本数据类型及其表示范围 2、自动类型转化3、强制类型转化及强制类型转化乱码问题4、类型提升以及类型提升易犯错误原创 2017-10-04 22:23:52 · 710 阅读 · 0 评论 -
Java二进制数操作与下划线分隔符_的使用
注意:1、java中用0b来直接表示二进制数2、用下划线_可以来分隔较长的整数,为程序员带来一些方便原创 2017-10-05 10:01:49 · 947 阅读 · 0 评论 -
Java命名规范(命名规则)
Java命名规范1、变量、方法名:首字母小写+驼峰原则private int myWeek;public void testName(){}2、常量:大写字母+下划线private final int MAX_VALUE;3、类名:首字母大写+驼峰原则class MyClass{}原创 2017-10-05 10:15:20 · 1737 阅读 · 0 评论 -
Java语言处理环境
Java语言的处理环境既有编译程序又有解释程序下面用一张图简单介绍一下Java语言处理环境图片参考自《编译原理》清华大学出版社原创 2017-10-06 17:12:30 · 369 阅读 · 0 评论 -
Rhyme/ Java IO流关闭工具类
Java IO流关闭工具类原创 2017-10-21 11:00:55 · 542 阅读 · 0 评论 -
Rhyme/Java 常用IO流总结
Java 常用IO流总结原创 2017-10-21 20:40:14 · 238 阅读 · 0 评论 -
Rhyme/ Java 文件的分割与合并完整代码
Java 文件的分割与合并完整代码package com.maple.file;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.Closeable;import java.io.File;im原创 2017-10-22 00:12:33 · 380 阅读 · 0 评论 -
Rhyme/ java TCP网络编程 聊天室(群聊与私聊)TCP、多线程、IO流编程完整代码实现
**TCP网络编程 聊天室(群聊与私聊)完整代码实现实现工具:Socket、多线程、IO流实现效果图Client.javapackage com.maple.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;/*原创 2017-10-22 14:36:15 · 1371 阅读 · 0 评论 -
Rhyme/Java 泛型<T>很详细教程
Java 泛型详细教程1、泛型的产生我们先来看一个例子:我有一个Student学生类,他有两个属性分别用于存放javaEE,Linux课的考试成绩,可是考试成绩可能是整数,也可能是浮点数,为了解决这个问题,就将javaEE、Linux的成绩用Object类型来表示接下来我就在测试类中测试以上的Student类你会发现使用Object类型来表示成绩,会有以下几点缺点:1、类型丢失(原有的double、原创 2017-10-15 09:47:31 · 537 阅读 · 0 评论 -
Rhyme/ Eclipse 新建类快捷键设置
Eclipse 新建类快捷键设置原创 2017-10-16 13:05:06 · 2461 阅读 · 0 评论