-
java获取对象实例_JAVA语言中Class类对象实例的获取方法
2021-03-14 03:53:35“Class”类众所周知Java有个Object 类,是所有Javaclasses的继承根源,其内声明了数个应该在所有Javaclass中被改写的methods:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个...“Class”类
众所周知Java有个Object 类,是所有Java
classes的继承根源,其内声明了数个应该在所有Java
class中被改写的methods:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class
object。
Class
class十分特殊。它和一般classes一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive
Java types(boolean, byte, char, short, int, long, float,
double)以及关键词void。当一个class被加载,或当加载器(class
loader)的defineClass()被JVM调用,JVM 便自动产生一个Class object。
“Class” object的取得途径
Java允许我们从多种管道为一个class生成对应的Class object。下图是一份整理。
Class object 诞生管道
示例
运用getClass()
注:每个class 都有此函数
String str = "abc";
Class c1 = str.getClass();
运用
Class.getSuperclass()
Button b = new Button();
Class c1 = b.getClass();
Class c2 = c1.getSuperclass();
运用static method
Class.forName()
(最常被使用)
Class c1 = Class.forName ("java.lang.String");
Class c2 = Class.forName ("java.awt.Button");
Class c3 = Class.forName ("java.util.LinkedList$Entry");
Class c4 = Class.forName ("I");
运用
.class 语法
Class c1 = String.class;
Class c2 = java.awt.Button.class;
Class c3 = Main.InnerClass.class;
Class c4 = int.class;
Class c5 = int[].class;
运用
primitive wrapper classes
的TYPE 语法
Class c1 = Boolean.TYPE;
Class c2 = Byte.TYPE;
Class c3 = Character.TYPE;
Class c4 = Short.TYPE;
Class c5 = Integer.TYPE;
Class c6 = Long.TYPE;
Class c7 = Float.TYPE;
Class c8 = Double.TYPE;
Class c9 = Void.TYPE;
-
java 继承 获取父类参数_一、获取子类DAO继承父类DAO的泛型参数类型的Class对象...
2021-03-08 19:04:33首先知道:Class clzz=getClass().getSuperclass();...而Type是JAVA语言中所有类型的公共父接口,Class类是其直接实现类。获取父类泛型类型:Type type=getClass().getGenericSuperclass();ParameterizedType pt =...首先知道:
Class clzz=getClass().getSuperclass();
Type type=getClass().getGenericSuperclass();
而Type是JAVA语言中所有类型的公共父接口,Class类是其直接实现类。
获取父类泛型类型:
Type type=getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) type;//参数化
Type[] types=pt.getActualTypeArguments();
Class entityClass=(Class)types[0];
......
以下为 Type直接子接口
ParameterizedType,GenericArrayType,TypeVariable和WildcardType四种类型的接口
ParameterizedType: 表示一种参数化的类型,比如Collection
GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型
TypeVariable: 是各种类型变量的公共父接口
WildcardType: 代表一种通配符类型表达式,比如?, ? extends Number, ? super Integer【wildcard是一个单词:就是“通配符”】
-
Java面向对象-继承
2019-06-27 22:09:37继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类...Java继承的概念与实现
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。 继承使用extends 关键字。类的继承( extends )格式:
class 父类 {
}
class 子类 extends 父类 {
}例子:
注意:由于Student类继承 People类,虽然name 和 age 变量没有在 Student 中定义,但是已在 People 中定义,可以直接拿来用。Student 是 People 的子类,People 是Teacher 类的父类。构造方法不能被继承:
注意:构造方法不能被继承。一个类的构造方法只有两种方式获得:- 自己编写构造方法。
- 当类中没有构造方法时,类会自动生成不带参数的默认构造方法。
单继承性:
Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性。
Java继承中的方法重写:
方法重写又称方法覆盖,方法重写是子类与父类的一种多态性表现
子类可以重写所继承父类除private以为的方法与成员。
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。
如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做重写旧方法。
被重写的方法在子类中只能通过super调用。
注意:重写不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用。
例子:
方法重写的原则:
重写方法的返回类型、方法名称、参数列表必须与原方法的相同。
重写方法不能比原方法访问性差(即访问权限不允许缩小)。
重写方法不能比原方法抛出更多的异常。
被重写的方法不能是final类型,因为final修饰的方法是无法重写的。
被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
被重写的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足重写条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足重写条件,但是仍然不会发生重写,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。方法的重载:
方法重载是一个类的多态性表现,
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。只能重载构造函数
例子:
重载规则:
被重载的方法必须改变参数列表;
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
重写和重载的区别:
this关键字:
this关键字:指向自己的引用
this 与super 关键字类似,this 用来表示当前类的实例,super 用来表示父类。super 关键字:
我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
1.通过 super 调用父类的变量以及父类的隐藏变量:
当调用父类的隐藏变量时,必须要在父类中声明 getter 方法,因为声明为 private 的数据成员对子类是不可见的。2.通过 super 调用父类的方法和父类被重写了的方法和父类的构造方法:
super 也可以用在子类的子类中调用父类方法,Java 能自动向上层类追溯。直到找到该方法为止,父类行为被调用,就好像该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向上层类追溯。
在许多情况下,使用默认构造方法来对父类对象进行初始化。当然也可以使用 super 来显示调用父类的构造方法。
例子:
从执行结果可看出构造方法基本初始化运行顺序是:
1.初始化子类必先初始化父类。
2.要先初始化父类,必须先初始化它的属性再初始化它的方法。
3.再回到子类,初始化子类属性,再回到子类的构造方法,才算是完成一个类的实例化在构造方法中要注意:
无论是 super() 还是 this(),都必须放在构造方法的第一行。
在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
不能在构造方法以外的任何方法内调用构造方法。
在一个构造方法内只能调用一个构造方法。
如果编写一个构造方法,既没有调用 super() 也没有调用 this(),编译器会自动插入一个调用到父类构造方法中,而且不带参数。super 与 this 的区别:
super 不是一个对象的引用,不能将 super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
this是指向自己的引用,this 用来表示当前类的实例,可在当前类中调用。 -
java注解与反射(4)——四种获取class对象的方法,通过class对象获取父类class对象
2020-12-08 09:11:50四种创建class对象的方法 先创建三个类,Person,Student,Teacher。其中Student和Teacher继承Person类 class Person{ public String name; public Person() { } public Person(String name) { this.name =...四种创建class对象的方法
- 先创建三个类,Person,Student,Teacher。其中Student和Teacher继承Person类
class Person{ public String name; public Person() { } public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } } class Student extends Person{ public Student(){ this.name = "学生"; } } class Teacher extends Person{ public Teacher(){ this.name= "老师"; } }
- 四种获取class对象的方法
public class Test03 { public static void main(String[] args) throws ClassNotFoundException { Person person = new Student(); System.out.println("这个人是:"+person.name); //方式一:通过对象获得 Class c1 = person.getClass(); System.out.println(c1); System.out.println(c1.hashCode()); //方式二:forname获取 Class c2 = Class.forName("com.lixv.reflection.Student"); System.out.println(c2); System.out.println(c2.hashCode()); //方式三:通过类名.class获取 Class c3 = Student.class; System.out.println(c3); System.out.println(c3.hashCode()); //方式四:基本内置类型的包装类都有一个Type属性 Class c4 = Integer.TYPE; System.out.println(c4); } }
运行结果:
hashcode是同一个值,说明,获取的是同一个对象- 获取class的父类class对象
//测试创建class类的创建方式有哪些 public class Test03 { public static void main(String[] args) throws ClassNotFoundException { Person person = new Student(); System.out.println("这个人是:"+person.name); //方式一:通过对象获得 Class c1 = person.getClass(); System.out.println(c1); System.out.println(c1.hashCode()); //获得父类class对象 Class c5 = c1.getSuperclass(); System.out.println(c5); } }
运行结果:
-
java 父类获取子类名称_java 面向对象 --继承
2020-11-29 07:51:55语法格式: Java 只支持单继承。访问修饰符 class 子类 extends 父类 { }访问修饰符如果是public 在整个项目中可以访问,如果不写该类只能在包内可见。子类可以从父类中继承的内容:1、可以继承父类中publi... -
java面向对象-继承性
2021-03-27 16:09:351. 为什么要有类的继承性?(继承性的好处) 减少了代码的冗余,提高了代码的复用性 便于功能的扩展 为之后多态性的使用,提供了前提 图示: 2. 继承性的格式 class A extends B{} A:子类、派生类、subclass B... -
java语言里class_JAVA语言中Class类对象实例的获取方法
2021-03-17 16:00:34[摘要]众所周知Java有个Object 类,是所有Java classes的继承根源,其内声明了数个应该在所有Java class中被改写的methods:hashCode()、equals()、clone()、toString()、getClass()等。[关键字]JAVAClass“Class”... -
Java面向对象:继承性
2021-01-26 23:29:57继承性 一、继承性的优势: 减少了代码的冗余,提高了代码的复用性 ...特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。只是因为封装性的影响,使得子类不能直接 -
java面向对象12继承性
2020-01-29 11:19:18/* 面向对象特性之继承 *1.为什么要有继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中, ...那么多个类无需再定义这些属性和...一旦子类继承父类以后,子类就获取了父类中声明的所有属性和方... -
java 获取泛型t的class_Java基础知识点总结
2020-12-02 06:51:12Java基础知识点总结面向对象三大特性继承:一般类只能单继承,内部类实现多继承,接口可以多继承封装:访问权限控制public > protected > 包 > private 内部类也是一种封装多态:编译时多态,体现在向上... -
java 中面向对象的继承性
2021-01-23 20:00:56面向对象的特征之二:继承性 why? * 一、继承性的好处: ① 减少了代码的冗余,提高了代码的复用性 ② 便于功能的扩展 ③ 为之后多态性的使用,提供了前提 二、继承性的格式: class A extends B{} A:子类、派生... -
Java面向对象-继承与抽象类
2019-05-15 22:31:37继承:多个类的有共同的成员变量和方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取父类中的成员了 extends package con_01; public class ExtendsDemo{ } class Game{ ... -
小白学java之面向对象编程-获取继承关系
2020-11-17 11:24:23当我们获取到某个Class对象时,实际上就获取到了一个类的类型: Class cls = String.class; // 获取到String的Class 还可以用实例的getClass()方法获取: String s = ""; Class cls = s.getClass(); // s是String,... -
java class 对象获取三种方式 优缺点_Java创建线程三种方式的优缺点
2021-03-18 10:38:232020-11-18|复制链接分享一篇关于关于Java创建线程三种方式的优缺点,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小妖来看看吧Java创建线程主要有三种方式:继承Thread类创建... -
java之对象继承性
2018-01-02 17:40:14面对对象的继承性 1.为什么要设计继承性?2.通过“class A extends B”类实现类的继承。 子类:A 父类(或基类 SuperClass): B 子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。 明确:当父类中... -
java继承主键_通过Android Java中的主键获取Realm对象的正确...
2021-03-18 00:18:18这就是为什么我有像这样的Realm存储库(我写的)public class CalendarEventRepositoryImplextends LongRealmRepositoryImplimplements CalendarEventRepository {public CalendarEventRepositoryImpl() {super... -
JAVA语言中Class类对象实例的获取方法
2012-12-08 11:12:19[摘要] 众所周知Java有个Object 类,是所有Java classes的继承根源,其内声明了数个应该在所有Java class中被改写的methods:hashCode()、equals()、clone()、toString()、getClass()等。 [关键字] JAVA Class ... -
《Java基础学习笔记》JAVA面向对象之继承
2013-01-05 14:32:00一、继承 缺点: 打破了封装性,此时为了保证封装性使用 final...注意:千万不要为了获取其他类的功能,简化代码而继承。 必须是类与类之间有所属关系才可以继承,所属系 is a. class Person { String na... -
Java反射获取Class类的实例
2021-04-08 20:41:51Java反射获取Class类的实例 Class类 在Object类中定义了以下的方法,此方法将被所有子类继承 public final Class getClass() 以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的... -
java 7 Reflection详解(二),获取class对象信息
2017-11-13 00:58:00承接着第一篇如何获取class对象, 这一节将继续谈到如何获取class对象的信息。class对象信息大致可分为两类:(1)class对象的信息;(2)class对象的成员信息。class对象的信息主要修饰修饰符,泛型参数,所实现的... -
java 获取泛型t的class_总结了一些java知识点,适合小白新手,学到就是赚到哦
2020-11-28 19:02:22学习JAVA有一段时间了,以下是我摘的一篇总结文章或许对大家也适用,...面向对象三大特性继承:一般类只能单继承,内部类实现多继承,接口可以多继承封装:访问权限控制public > protected > 包 > priva... -
java 继承的概念及特点_JAVA_基础面向对象:继承性与多态的概念及特点
2021-03-13 11:27:47A:子类、派生类、subclassB:父类、超类、基类、superclasspublic class A extends B {....}体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。特别的,父类中声明... -
java 判断 继承_Java反射(5)获取继承关系
2021-02-12 16:08:11目录:通过Class对象可以获取继承关系:1.Class getSuperclass():获取父类类型...通过Class对象的isAssignableFrom()方法,判断Class向上转型是否可以实现。1.获取父类类型public class Main {public static void ma... -
JAVA反射(一):获取Class对象
2017-12-20 23:17:291. 获取父类这是最简单也是最容易理解的方法——getSuperclass(),唯一需要说明的是,返回的一定是类,不是接口。2. 获取内部类获取内部类有两种,分别为class.getClasses()与class.getDeclaredClasses(),但它们两... -
Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法
2018-02-24 17:56:17java.lang.Class类提供了获取类的各种信息对象的静态方法。 1.通过Class类可以做什么 获取类的包(Package)信息 获取类的注解(Annotation)信息 获取类的修饰符(Modifier)信息 获取类的继承的父类(Super Class)信息... -
java判断继承关系_获取继承关系
2021-03-04 07:43:29当我们获取到某个Class对象时,实际上就获取到了一个类的类型:Class cls = String.class; // 获取到String的Class还可以用实例的getClass()方法获取:String s = "";Class cls = s.getClass(); // s是String,因此...