首页
学习
活动
专区
圈层
工具
发布

浅谈 Java 中的 Class 类

于是开始查阅有关反射的博文,但是在学习的过程中,发现 Class 类始终伴随着反射出现。因为多少接触过 Class 类,所以有关反射的代码还是能看懂的,不会影响我学习反射的知识,本就可以直接略过。...在面向对象的语言中,我们擅长将现实世界中的一个实际存在的事物抽象并封装成一个类,并在类中添加相应的成员变量(属性)和方法,然后我们就可以创建该类的对象,该对象持有属于自己的成员变量和方法。...但是,我们依然可以通过其他方式得到 Class 类的对象 如果我们的程序中没有 OtherClass 这个类,使用 Class.forName() 动态加载时,在程序编译时刻是不会报错的,只有在运行时刻检测到没有该类才会出错...如果 MyClass 类中存在显示的有参构造方法,会覆盖默认的无参构造方法,同时又没有显示的声明无参构造方法,那么执行这段代码时会直接导致程序Crash掉。...针对这一点,相信有许多人在使用第三方框架或者开源库时,遇到过因为在类中添加了带参数的构造方法而导致程序出错的情况!

50710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    浅谈 Integer 类

    1、Integer 类简介   首先我们大致看一下Integer是什么,Integer 类在JDK1.0的时候就有了,它是一个类,是 int 基本数据类型的封装类。 ? 基本API如下: ? ?...①、自动装箱   一般我们创建一个类的时候是通过new关键字,比如: Object obj = new Object();   但是对于 Integer 类,我们却可以这样: Integer a = 128...②、自动拆箱   我们将 Integer 类表示的数据赋值给基本数据类型int,就执行了自动拆箱。...我们进入到Integer 类的valueOf()方法: ?   ...分析源码我们可以知道在 i >= -128 并且 i 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。

    84890

    浅谈类加载

    加载过程中通过全限定类名将二进制数据加载到内存中;链接阶段包括验证,准备以及解析,其中验证指的是对class二进制文件格式的校验,准备阶段为类中的静态变量分配内存,解析阶段为这些静态变量赋默认值;初始化阶段才为静态变量赋初值...类加载器 主要完成加载过程中的第一步,通过该类的全限定类名来获取描述该类的二进制字节流。...其中bootstrap Class Loader 负责加载存放在\lib目录下能被JVM识别的类。 Extension Class Loader负责加载\lib\ext目录中的类。...public abstract class ClassLoader { private final ClassLoader parent; } 类加载的过程是采用双亲委派模型,其工作过程为:当一个类需要被加载时其会先在自己的类加载器的缓存中查找...反之,假设对于每个类都使用自己的类加载器加载的话,当某个用户编写一个java.lang.Object类,覆盖了系统中的Object类,java体系中最基础的行为都就不能保证了。

    51110

    浅谈StackTrace类

    在写通用组件的时候,我们需要关心程序运行的堆栈信息。堆栈信息是什么? 堆栈是一种执行“后进先出”算法的数据结构。程序的函数调用是用堆栈实现的。...在程序中,每次调用一个函数,就会生成一个堆栈帧,并push进入堆栈中。每一次结束一个函数调用,就会从堆栈中pop一个堆栈帧。...在.Net Framework中,定义了StackTrace类,它可以获取当前堆栈的每一帧的信息。...GetFrame(int index); StackFrame类提供的方法: int GetFileLineNumber(); int GetFileColumnNumber(); string GetFileName...我们这里的堆栈信息并不能获取每一个函数在调用的时候,传递的参数值,对于有这种需求的程序员,可以考虑使用AOP编程的方式编写一个MethodContextLogger组件,这个组件可以获取方法的出入的参数值

    1.7K40

    浅谈Kotlin(三):类

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型、基本语法、代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言:   已经学习了前两篇文章...本篇介绍Kotlin中类的使用。...  首先看Java类的构造   Java中定义构造方法特点: 1、方法名需要和类名一致       2、参数可以任意属性值的组合,也可以不写       3、可以有多个构造方法 //无参数的构造方法...:Kotlin类中可以有一个主构造方法 和 一个至多个二级构造方法。   ...二、类的继承 关于Kotlin的类有几个知识点需要先知道:     1、默认情况下,任何类都是根继承自Any(类似于Java中的Object)     2、默认情况下,任何类都是不可继承的(final

    50340

    浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。...但是由于偶尔的需要,Person需要使用Phone,在Person类中的具体方法中需要实例化Phone,这时Person就依赖于Phone.持有Phone类的是Person类的一个方法,而不是Person...PersonGroup构造方法的参数,因此可以Person类可以完全脱离PersonGroup类而存在,不会因为PersonGroup实例的消亡而消亡,就像现实生活中,人不会因为脱离人群就挂了... 4...Person类的构造方法中才被具体实例化,一旦Person实例生成,则Foot实例也生成,当Person实例消亡,其Foot实例也消亡,就像现实生活中,生成一个人,并定会伴随着脚的生成,但是如果那个人挂了...总结:以前一直对它们之间的区别模模糊糊,通过查阅和总结写出来的个人经验,希望对大家的理解也有所帮助 原文地址: 浅谈UML类图中类之间的5种关系

    1.3K60

    浅谈Java类加载器

    参数指定的路径 %JAVA_HOME%/jre/classes中的类 需要注意的是这个加载器是虚拟机启动时初始化的,Java程序是无法使用的 Extension ClassLoader(扩展类加载器)...加载加载扩展类,扩展JVM的类库它主要负责加载以下类库: %JAVA_HOME%/jre/lib/ext目录 java.ext.dirs系统变量指定的路径中类库 Application ClassLoader...(应用程序加载器) Java程序默认的类加载器,主要负责加载classpath所指定的类库 除了以上3个类加载器,开发人员还可以根据自己的需求自己定制实现类加载器 类加载器之间的层次模型一般是这样的:...Null 注意最后的null值应该是启动类加载器、单因为是C++语言编写的,所以无法获取到相关的信息 上述的这种层级关系被称为类加载器的双亲委派模型。...当一个类加载器在接到加载类的请求时,首先将加载任务委托交给父类加载器,父类加载器又将加载任务向上委托,直到最顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,如果不行就向下传递委托任务,

    46610

    浅谈react 中的 this 指向

    前言 最近在做一个项目的时候 关于class方法中 this 指向以及 外置prototype 的 this 指向 引发了我的思考! ?...image.png 经过打印我们发现 B 中的 this 指向的都是 B 这个类 那么问题来了,我们 都知道 react的 class 中需要绑定 this, 为什么需要?...this.getme m() // 此时 this 变化为 undefined 将方法进行赋值之后,丢失了上下文,导致 this 变成 undefined , this之所以没有变为window 是因为类声明和类表达式的主体以...ES6class 注意点 译文 为什么需要在 React 类组件中为事件处理程序绑定 this 未解之谜 原生 class 中 如果方法改为箭头函数这种形式就会报错 但是在 react 的 class...this 指向定义时所在对象 定义的环境在 window 此时 this 指向 window 如果是 react 创建的组件 此时 this指向和类之外的 this 是一致的 (但不是

    2.3K10

    浅谈MySQL中的锁

    根据加锁范围MySQL中的锁可以分为全局锁,表级锁以及行级锁。...全局锁 全局锁是对整个数据库进行加锁的,执行Flush table with read lock对整个数据库加锁,执行之后会使得整个库处于只读状态,数据更新语句,数据定义语句以及更新类事务的提交语句都会被阻塞...行锁顾名思义,针对数据表的行记录建立的锁,如果线程1更新这一行,线程二也要更新这一行,如此只有等线程一的事务提交后,线程二才能更新 两阶段锁协议: 在InnoDB中,行锁是在需要时添加的,并不是不需要时就立即释放...知道了两阶段锁的这个特性后,对于一条事务中多条跟新语句其会锁多行,我们可以通过改变其顺序(令竞争激烈并发度高的那些可能造成锁冲突的语句往后放)达到提升并发度的效果,例如: 电影院卖票这种场景 开启事务...2)、发起死锁检测,发现死锁后立即回滚循环等待链中某一个事务,让其他事务先执行。将参数 innodb_deadlock_detect 设置为 on即可,该参数默认值亦为on。

    1.1K20

    浅谈Kotlin中的函数

    4.顶层函数 不同于Java中函数只能定义在每个类里面,Kotlin采用了JavaScript 中的做法,可以在文件任意位置处定义函数,这种函数称为顶层函数。...编译后顶层函数会成为文件类下的静态函数,比如在文件名是join.kt下定义的joinToString函数可以通过JoinKt.joinToSting调用,其中JoinKt是编译后的类名。...5.扩展函数 扩展函数是类的一个成员函数,不过定义在类的外面 扩展函数不能访问私有的或者受保护的成员 扩展函数也是编译成静态函数 所以可以在Java库的基础上通过扩展函数进行封装,假装好像都是在调用Kotlin...如果Lambda捕捉了变量,每个被捕捉的变量会在匿名类中有对应的字段,而且每次调用都会创建一个这个匿名类的新实例。否则,一个单例就会被创建。...Lambda中的this引用指向的是包围它的类。 如果在Lambda中要用到常规意义上this呢?这个就需要带接收者的函数。看下比较常用的两个函数with和apply。

    3K20

    浅谈JavaScript中的接口

    在面向对象的语言中,使用接口的方式大体相似。接口中包含的信息说明了类需要实现的方法以及这些方法的签名。类的定义必须明确地声明它们实现了这些接口,否则是不会编译通过的。...三、在JavaScript中模仿接口 在JavaScript中模仿接口主要有三种方式:通过注释、属性检查和鸭式辩型法,以上三种方式有效结合,就会产生类似接口的效果。...四、Interface类 在下面的代码中,对Interface类的所有方法的参数都进行了严格的控制,如果参数没有验证通过,那么就会抛出异常。...TestResult类会被修改,致使其失去这两个方法,但是构造器中的检查依旧会通过,只是renderResult方法不再有效。 此外,构造器中的这个检查施加了一些不必要的限制。...解决问题的办法就是删除构造器中的校验,并使用接口代替。

    83940

    浅谈Lucene中的DocValues

    的排序字段然后再次构建一个最终的排好序的文档集合list,这个步骤的过程全部维持在内存中操作,而且如果排序数据量巨大的话,非常容易就造成solr内存溢出和性能缓慢。...,大多数人的场景中,不一定能用到,后面会单独写一篇文章介绍。...(四)DocValues的种类 在lucene的枚举类DocValuesType 中,我们可以看见它声明了六个常量: 1, NONE 不开启docvalue时的状态 2, NUMERIC...3,在ElasticSearch中,默认docvalue全部激活,比较简单暴力,大家可酌情关闭一些不需要使用docvalue的字段,以节省磁盘空间 ?...最后再提一点,在和solr和es中,如果想要在自己写的插件中读取docvalue的值,读取方法和lucene的差不多,需要注意doule和float的的值转换。

    3.1K30
    领券