int 型与 double型可以直接比较
[TOC]
概述1234567int 型与 double型 可以直接比较吗?int a=8;double b=3.5;System.out.println("a等于b:"(a==b));
两个可以直接比较,int型默认转换为double进行比较,即a转换为8.0与b的3.5进行比较,两者不相等,您的System.out.println(“a等于b:”(a==b));语句里面少了一个+号,应该写成System.out.println(“a等于b:”+(a==b));即可以正常输出:a等于b:false,您可以试试看,但是如果想都用int型比较则需要进行强制转换。
Java中Array.sort的方法学习
[TOC]
概述Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。下面为大家介绍这几种形式的用法。
Arrays.sort(int[] a)这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
12345678910111213public class Test { public static void main(String[] args) { int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; Arrays.sort(a); for(int i = 0; i < a.length; i ++) { System.out.print(a[i] + " "); } }}//运行结果如下://0 1 2 3 4 5 6 7 8 9
Arrays.sort(int[] a, i ...
Java之反射基础学习
[TOC]
文章参考:https://www.jianshu.com/p/607ff4e79a13
概述动态语言针对动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。反射机制在运行时只能调用methods或改变fields内容,却无法修改程序结构或变量类型。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。
反射的功能对于Java反射,平常工作中虽然经常用到,尤其是一些开源框架的设计中,大量用到注解和反射配合使用,来完成很多动能。
JAVA反射机制,可在运行态直接操作任意类或对象的所有属性和方法,主要有以下几个功能:
在运行时获取任意对象所属的类
在运行时构造类的实例对象
在运行时获取或修改类/成员的属性
在运行时调用某个类/对象的方法
另外还可获取类的其他信息,比如描述修饰符、父类信息等
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的使用我们平时使用Java反射主要涉及两个类(接口)Class, Member等一些基础概念,下面我们就 ...
Java随机数之ThreadLocalRandom学习
[TOC]
文章转自:https://github.com/5A59/android-training/blob/master/jvm-art/java%E5%8F%8D%E5%B0%84%E4%B8%BA%E4%BB%80%E4%B9%88%E6%85%A2.md
我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运用更是常见。我相信,每次提到反射,大家的第一反应一定是反射效率低,尽量少使用。但是反射的效率到底低多少?反射效率低的原因在哪里?这篇文章就来探索一下这些问题。由于本机上安装的是 openjdk 12,所以这里就使用 openjdk 12 源码进行分析。
我们先看结论,然后分析一下 Java 反射的原理,过程中大家可以根据结论,对源码做一些思考,然后再根据原理中的一些实现,看看 Java 反射效率低的原因。
所以最终我们的结论是:
Java 反射效率低主要原因是:
Method#invoke 方法会对参数做封装和解封操作
需要检查方法可见性
需要校验参数
反射方法难以内联
JIT 无法优化
Java 反射原理–获取要反射的方法1.1 反射的使用我们先来看 ...
Java随机数之ThreadLocalRandom学习
[TOC]
Type是Java语言中所有类型的父接口,包括
raw types(原始类型,包括类,枚举,接口,注解,数组(但不包括泛型数组)),
parameterized types(参数化类型,如Set,Map<String,String>,Class<?>),
array types(泛型数组和参数类型数组,如T[],List[]),
type variables(类型变量,如T,K,V) and
primitive types(基本类型,如boolean,char,byte,short,int,long,float,double).
我们看一下类的集成关系:
1234567891011121314public interface Type { /** * Returns a string describing this type, including information * about any type parameters. * * @implSpec The default implementa ...
Java随机数之ThreadLocalRandom学习
[TOC]
区别isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点:
isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。
isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。
使用方法:
123父类.class.isAssignableFrom(子类.class)子类实例 instanceof 父类类型
isAssignableFrom()方法的调用者和参数都是Class对象,调用者为父类,参数为本身或者其子类。
instanceof关键字两个参数,前一个为类的实例,后一个为其本身或者父类的类型。
我们有时候需要为对象字段设置默认值,即在别的处理中生成对象并对对象进行赋值后,有些值需要有默认值,但是又不方便通过构造方法设置的时候,我们可以通过反射配合注解来为其设置默认值而不用调用一堆set方法。
用法我们有时候需要为对象字段设置默认值,即在别的处理中生成对象并对对象进行赋值后,有些值需要有默认值,但是又不方便通过构造 ...
Java随机数之ThreadLocalRandom学习
[TOC]
getSuperclassgetSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数)
12Class<? super T> getSuperclass()// 返回表示此Class所表示的实体(类、接口、基本类型或void)的超类的Class。
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。
如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。
返回:
此对象所表示的类的超类。
getGenericSuperclass12 Type getGenericSuperclass()// 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以 ...
Android之性能监控框架
[TOC]
概述文章参考:https://blog.csdn.net/javazejian/article/details/72772461
首先,我们先来思考几个问题:
1、Java的内存结构总共分为几个部分?
2、Java的内存结构中这些内存区域哪些是线程私有的?哪些是线程共有的?
3、Java中内存结构中有哪些区域可能会发生OOM?
在说Java内存模型之前,我们先说一下Java的内存结构,也就是运行时的数据区域: Java虚拟机在执行Java程序的过程中,会把它管理的内存划分为几个不同的数据区域,这些区域都有各自的用途、创建时间、销毁时间。下面这张图,是我从网上抠下来的。大家可以看看。
Java运行时数据区分为下面几个内存区域:
1.PC寄存器/程序计数器(也就是图中右下角部分):为了保证程序能够连续地执行下去,处理器必须具有某些手段来确定下一条指令的地址,而程序计数器正是起到这种作用。
程序计数器严格来说是一个数据结构,用于保存当前正在执行的程序的内存地址。程序计数器是一个较小的内存空间,线程私有,它是唯一一个在 Java 虚拟机规范中没有规定任何 O ...
Java虚拟机之Java垃圾回收机制
[TOC]
文章参考:https://blog.csdn.net/pi9nc/article/details/12374049
文章参考:https://www.infoq.cn/article/ZOYqRI4c-BFKmUBmzmKN
文章参考:https://blog.51cto.com/14455981/2422827
概述1. 垃圾回收的意义在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是”无用信息”,这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片。由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。
垃圾回收能自动释放内存空间,减轻编程的负担。这 ...
Java虚拟机之类加载机制
[TOC]
文章参考:https://blog.csdn.net/ns_code/article/details/17881581
文章参考:https://www.jianshu.com/p/7553bf6c708a
概述在编程的时候,我们在使用一个对象的时候,直接顺手一个People people = new People()
那么我们不得不好奇,Java虚拟机是怎么帮我们找到这个类的呢。
首先,如果这个类能被new的出来的话。这个类肯定首先要被JVM加载到内存中。所以,Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。
下面我们来学习类的加载机制,能够让我们了解到整个类的加载流程,有助于我们理解类的生命周期,学习本文我们可以了解到:
类的加载流程
类的生命周期
什么是双亲委派模型
为什么我们说来的静态变量和常量的初始化是在类加载时期
类哪些变量存在于方法区, ...