,并且它的实际的屋里内存空间和Java堆区都是可以不连续的 方法区的大小跟堆空间一样,可以选择固定大小或者可拓展 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误...windows下-XX:MetaspaceSize是21M-XX:MaxMetaspaceSize是-1,即没有限制 与永久代不同,如果不指定大小,默认情况下,虚拟机会耗尽所有的可用系统内存,如果元数据发生溢出...查看类加载和卸载信息 在大量使用反射、动态代理、CGLib等字节码框架,动态生成JSP以及OSGi这类自定义类加载器的场景中,通常都需要Java虚拟机具备类似卸载的能力,以保证不会对方法区造成过大的内存压...:全局常量:static final 被声明为final的类变量的处理方法则不同,每个全局变量在编译的时候就会被分配了 常量池 运行时常理池 运行时常理池(Runtime Constant Pool)...池中的数据项像数组一样,都是通过索引访问的 运行时常理池包含多种不同的常量,包括编译期就已经明确的数值字面量,也包括运行期解析后才能够获得方法或者字段引用,此时不再是常量池中的符号地址了,这里换为真实地址
在 OOP 中,每个对象都是一个特定类的实例。类定义了对象的属性(也称为数据成员或字段)和方法(也称为成员函数或行为)。对象的属性是用来存储数据的,而方法则是用来执行任务的。...方法重载(Overloading):在同一个类中,如果有多个方法的名称相同,但参数列表不同(参数的数量、类型或顺序不同),那么这些方法就被称为重载方法。...方法重载允许我们使用同一个方法名执行不同的操作。 方法重写(Overriding):在子类中,如果有一个方法与父类的某个方法的名称、参数列表和返回类型都相同,那么这个方法就被称为重写方法。...在方法签名的末尾使用 throws 关键字,后面跟着可能会抛出的异常类型。一个方法可以声明抛出多种类型的异常,多个异常类型之间用逗号分隔。...我们可以通过 Field 对象获取字段的名称、类型、修饰符等信息,也可以通过 Field 对象获取和设置字段的值。
abstract: 抽象的,用在类的声明中来指明一个类是不能被实例化的,但是可以被其他类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现。...goto: Java为了避免使用goto带来的潜在错误,把goto设为保留字。 package: 用来定义一个包来组织功能不同的类和接口。 synchronized: 在多线程操作中用来同步代码块。...this: 代表当前使用的类的一个实例,可以用来访问类变量和类方法。 super: 对当前对象的父类对象的引用。 boolean: 用来定义一个布尔类型数据。 byte: 用来定义一个字节类型。...如果一个异常被抛出,一个可选的catch语句块会处理try语句块中抛出的异常。同时,一个存在的finally语句块会被执行,无论一个异常是否被抛出。...当对象序列化的保存在存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient。 extend: 在类的声明中是可选的,用来指明类需要继承一个类。
访问权限修饰符应封装的隐藏细节的理念,java提供了访问权限修饰符来控制调用者的访问权限,详情如下: private:属于类访问权限,表示私有的,只能在当前类中访问,使用private修饰的类、方法、字段...protected:属于子类访问权限,表示受保护的,使用private修饰的类、方法、字段,不仅同包中类可以访问,而且即使不同包,但是如果有继承关系,也可以访问。...使用web框架开发时,也会更多的使用继承来拓展框架的功能,以适应不同的业务需求。...在重写方法父类方法时,使用@Override注解修饰方法,若是重写错误,就会报编译错误,是一大开发利器;这里需要注意的是只有方法会被重写,字段则没有重写一说。...思考:如果A类想要得到B的功能行为,如若A类是B类的一种特殊情况,就应该采用继承来实现,否则使用组合方式。
方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:java.lang.OutOfMemoryError: PermGen space 或者java.lang.OutOfMemoryError...如果元数据区发生溢出,虚拟机一样会抛出异常OutOfMemoryError:Metaspace -XX:MetaspaceSize:设置初始的元空间大小。....类名) 这个类型直接父类的完整有效名(对于interface或是java.lang.object,都没有父类) 这个类型的修饰符(public,abstract,final的某个子集) 这个类型直接接口的一个有序列表...; } } 补充说明:全局常量(static final) 被声明为final的类变量的处理方法则不同,每个全局常量在编译的时候就会被分配了。...常量池内存储的数据类型包括: 数量值 字符串值 类引用 字段引用 方法引用 例如下面这段代码: public class MethodAreaTest2 { public static void
永久代使用的是 JVM 的内存,而元空间使用的是本地的直接内存。 直接内存并不是 JVM 运行时数据区的一部分,因此不会受到 Java 堆的限制。...但是它会受到本机总内存大小以及处理器寻址空间的限制,所以如果这部分内存也被频繁的使用,依然会导致 OOM 错误的出现。 方法区的大小 方法区的大小是可以进行设置的,可以选择固定大小也可以进行扩展。...方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,比如:加载大量的第三方 jar 包、Tomcat 部署的工程过多、大量动态生成反射类等都会导致方法区溢出,抛出内存溢出错误。...、结束位置、代码处理在程序计数器中的偏移地址、被捕获的异常类的常量池索引 non-final 的类变量 静态变量和类关联在一起,随着类的加载而加载,他们成为类数据在逻辑上的一部分 类变量被类的所有实例所共享...final 的类变量的处理方法是不一样的,全局常量在编译的时候就被分配了。
A.0 B.1 C.-1 D.死循环 6、下列哪一种叙述是正确的( ) A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法...在类方法中可用this来调用本类的类方法 B. 在类方法中调用本类的类方法时可直接调用 C. 在类方法中只能调用本类中的类方法 D....(C ) A.0 B.1 C.-1 D.死循环 6、下列哪一种叙述是正确的( D ) A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住...修饰变量时,该变量使用中不被改变,必须在声明时给定初值,在引用中只能读取不可修改,即为常量。 修饰方法时,也同样 只能使用,不能在子类中被重写。...例如,不同的参数类型,不同的参数个数,不同的参数顺序 2.不能通过访问权限、返回类型、抛出的异常进行重载; 3.方法的异常类型和数目不会对重载造成影响; 4.对于继承来说,如果某一方法在父类中是访问权限是
无论是基本数据类型,还是一般的class类型,或是接口类型,都是可以通过.class的方式来获取与之对应的Class对象。...>... parameterTypes) 对于以上四个方法需要说明一点的是,getMethod或者getDeclaredMethod在获取指定方法的时候,需要传入该方法的形参类型,如果没有传入或者传入错误就会抛出...>... parameterTypes) 以上的方法和之前介绍的字段Field,方法Method很是相似。下面我们看看如何使用Constructor做一些事情。...java.lang.reflect包中对数组类型增添了专门的类Array来实现反射,这里的Array和数组中的Arrays是不同的。...如果能够用接口来完成的,尽量使用接口来完成。 理解不到之处,还望大家不吝赐教!
a方法抛出异常后,b方法并没有进行回滚,因为Propagation.REQUIRES_NEW会暂停 a方法的事务 ) Propagation.NOT_SUPPORTED:以非事务的方式运行,如果当前存在事务...Propagation.NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。 Propagation.NESTED :和 Propagation.REQUIRED 效果一样。...TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。...如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。...其实这还是由于使用Spring AOP代理造成的,因为只有当事务方法被当前类以外的代码调用时,才会由Spring生成的代理对象来管理。
如果你写的代码有错误,在编译期就会暴露出来,不修改是无法通过编译,更别说后续的运行了。...验证点如下:这个类是否有父类;这个类的父类是否继承了不允许被继承的类(final修饰的类);这个类是否实现了其父类或者接口中所要求实现的所有方法(抽象类可不实现);类中的字段、方法是否与父类产生矛盾(不符合规则的重载...准备阶段,说直白点,就是对类变量设置初始值。这里所说的类变量,是被static修饰的变量,而不是实例变量,这一点要搞清楚。 而准备阶段的初始值,是数据类型的零值。...在Java中,有两大的数据类型,一种是基本类型、另一种是引用类型。对于这两种类型的初始值如下: ?...生成这四条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候;读取或设置一个类的静态字段(被final修饰除外)的时候;调用一个类的静态方法的时候。
四、方法与构造函数引用:Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法: 五、Lambda 作用域:在lambda...void clearAssertionStatus() //1.4 移去所有类和包的显示断言状态设置,并禁用所有通过这个类加载器加载的类的断言. java中的3中处理系统错误的机制: 抛出一个异常...可以反馈用户以错误,但是不要记录用户错误的行为,除非想达到控制的目的。...(数量、类型、顺序) 方法覆盖: 1.访问修饰符相同或更宽 2.返回值类型相同 3.方法名相同 4.参数表相同 5.static 静态只能覆盖静态 非静态只能覆盖非静态 6.子类方法不能抛出比父类更多的异常...子类继承一个抽象类,如果不希望子类变成抽象类,那子类必须实现父类中的全部抽象方法 PS:多个修饰符修饰同一方法、类时的使用问题 1. abstract 不能与 final 一起修饰方法、类
5 方法区 线程共享 存放类信息(版本、字段、方法、接口等)、常量、静态变量、即时编译后的代码等数据。 内存不足时,抛出OutOfMemoryError(内存不足错误)。...4.字段信息: 字段信息存放类中声明的每一个字段(实例变量)的信息,包括字段的名、类型、修饰符。...5.方法信息: 类中声明的每一个方法的信息,包括方法名、返回值类型、参数类型、修饰符、异常、方法的字节码。...第二部分是类型指针,即对象指向它的类的元数据指针,虚拟机通过这个指针确定这个对象是哪个类的实例。...实例数据(Instance Data):程序代码中所定义的各种类型的字段内容(包含父类继承下来的和子类中定义的)。
同时我们发现 ArrayIndexOutOfBoundsException 是可以点击进去的,点击进去之后会发现是一个JDK自带的类 由此我们可以知道: 在Java中,不同类型的异常,都有与其对应的类来进行描述...异常声明: 关键字: throws 语法格式: 修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2…{ } 如果我们在使用方法是,有编译时异常(编译器警告),可以使用...try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获 如果异常存在父子类关系,则必须子类在前(catch),父类在后(catch) 因为如果父类在前...三、自定义异常类: 既然异常是一个类,那我们肯定也能通过定义类,来定义一个自定义的异常类型。 具体如何定义呢 ?...重写构造方法并调用父类的构造,用来传递发生错误的字段 下面我以一个简单的登录代码来进行演示: 首先是 登录功能类: public class Login { //这里是字段: public
,fianal,被声明为final的类变量处理方法不同,每个全局变量在编译的时候就分配了 运行时常量池vs常量池 1方法区内部包含了运行时常量池;2字节码文件,内部包含了常量池;3弄清楚方法区,需要理解清楚...class文件很小,常量池中只保存了指向用到类的链接 常量池数据类型:数量值、字符串值、类引用、字段引用、方法引用 常量池,可以看作一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型...,就会创建对应的运行时常量池 4运行时常量池中包含多种不同的常量,包括编译器就已经明确的数值字面量,运行期解析后才能获得的方法或字段引用。...,如果构造运行时常量池所需的内存空间超过了方法区所能提供的最大值,则jvm会抛出oom 方法区使用举例 方法区的垃圾回收 这个区域的回收效果难以令人满意,尤其是类型的卸载,条件相当苛刻。...查看类加载和卸载信息 有大量使用反射、动态代理、cglib等字节码框架,动态生成jsp,以及osgi这类频繁自定义类加载器的场景中,通常都需要java虚拟机具备类型卸载的能力,以保证不会对方法区造成过大的内存压力
c.foo('aa'); // OK,使用第二个签名如果两个重载签名的名称和参数列表均相同,则为错误。...= 0 y: number = 0}let p = new Point();在这种情况下,默认构造函数使用字段类型的默认值来初始化实例中的字段。...派生类的构造函数构造函数函数体的第一条语句可以使用关键字super来显式调用直接父类的构造函数。...let c2 = new C('abc'); // OK,使用第二个签名如果两个重载签名的名称和参数列表均相同,则为错误。...= 'b'; // 编译时错误:'y'不可见Protected(受保护)protected修饰符的作用与private修饰符非常相似,不同点是protected修饰的成员允许在派生类中访问,例如:class
如果代码 没 有错误,cmd命令提示符会进入下一行。(假设环境变量都设置好了)。...标识符是大小写敏感的 合法标识符举例:age、$salary、_value、__1_value 非法标识符举例:123abc、-salary java修饰符 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性...java关键字 abstract 抽象方法,抽象类的修饰符 assert 断言条件是否满足 boolean 布尔数据类型 break 跳出循环或者label代码段...byte 8-bit 有符号数据类型 case switch语句的一个条件 catch 和try搭配扑捉异常信息 char 16-bit Unicode字符数据类型 class...this 表示调用当前实例 或者调用另一个构造函数 throw 抛出异常 throws 定义方法可能抛出的异常 transient 修饰不要序列化的字段 try
一种数据类型变换为另外一种数据类型 数据类型的转换 在运算过程当中, 如果不同的数据类型进行运算,可能运行的结果发生错误 把一种数据类型赋值给另一种数据类型 所以在运行之前,把类型进行统一....1.类成员变量: 使用static修饰的字段. 2.实例成员变量: 没有使用static修饰的字段. 3.在方法不能定义static变量,static属于类, 方法属于对象。...子类可以使用父类当中的哪些成员 1.如果父类中的成员使用public修饰,子类继承. 2.如果父类中的成员使用protected修饰,子类也继承,即使父类和子类不在同一个包中. 3.如果父类和子类在同一个包中...把基本数据类型变的更强大,以面向对象的思想来去使用这些类型。 对基本数据类型包装的好处 使用包装对象后,功能变的更加强大。...以前使用double来去表示一个人的分数 此时这个人的分数考了0分,可以表示0.0 如果这个人没有来考试,那就代表这个没有分数 使用包装类型后, 即 可表示这两种状态一个0.0 一个 是null
使用 StreamAPI 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 StreamAPI 来并行执行操作。...Java 有哪些数据类型? Java 语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。...Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。...重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。...重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为 private 则子类中就不是重写。
本课程展示了获取Class对象的各种方法,并使用它来检查类的属性,包括其声明和内容。 本课程描述了如何使用 Reflection API 查找类的字段、方法和构造函数。...示例代码展示了如何检索数组的组件类型以及如何使用数组或enum类型设置和获取字段。 注意: 本教程中的示例旨在用于实验 Reflection API。因此,异常处理与在生产代码中使用的方式不同。...发现类成员说明了如何列出类中的构造函数、字段、方法和嵌套类。 故障排除描述了在使用Class时遇到的常见错误。...java.lang.reflect.Field类中的方法可以检索有关字段的信息,比如它的名称、类型、修饰符和注解。(检查类修饰符和类型章节中的类课程描述了如何检索注解。)...修改最终字段时的IllegalAccessException 如果尝试获取或设置private或其他不可访问字段的值,或者设置final字段的值(无论其访问修饰符如何),可能会抛出IllegalAccessException
) 是否继承了不允许被继承的类(final修饰的) 如果这个类不是抽象类,是否实现了其父类或接口要求必须实现的所有方法 类中的字段、方法是否与父类产生矛盾(例如覆盖父类的final字段或者出现不合规则的重写及重载...理论上StackMapTable属性存在错误和被篡改的可能,如果同时修改Code属性和StackMapTable属性可以绕过虚拟机的类型校验,因此没有通过验证的字节码肯定是有问题的,但是通过验证的字节码也不是百分之百安全的...只是分配初始值,初始值见下图,有一种情况例外,就是如果字段属性表有ConstantValue(stati final修饰的变量)属性,准备阶段就会为变量赋值而不是初始值 ?...这里我们来简单说一下变量分配,Java中的变量按其引用类型可以划分为原始类型,和引用类型。...变量内存的占用其实有两部分,一部分是变量的内存占用,还有一部分是变量所指向的数据占用的内存,分别称为变量内存和数据内存。
领取专属 10元无门槛券
手把手带您无忧上云