级联调用: class Father{ Father(){ System.out.println("Father birth"); } public void announce(){ System.out.println("Father"); } } class Child extends Father{ Child(){ System.out.println("Child birth"); } @Override public void ann…
在构造器中可以调用本类的其他重载构造器,不能使用构造器名称来调用另一个构造器,而是应该使用Java特定的this(-.)来调用. this(-.)方法必须出现在构造器中的第一行,用来调用其他重载构造器.调用时参数必须严格匹配. 这种调用方式的优点在于一个构造器可以不必重复编写其他构造器中已有的代码,而是通过调用其他构造函数以实现复用,从而提供良好和类代码结构. public class Teacher { private String name;            private Strin…
import Foundation /* 可能失败构造器的传播(调用) 1.可能失败的构造器可以调用同一个类中的普通构造器 2.普通构造器不能调用同一个类中的可能失败构造器 3.结构体中, 普通构造器却可以调用同一个结构体中可能失败的构造器 可能失败构造器的重写 1.子类可以用可能失败的构造器或者普通的构造器重写父类中的可能失败的构造器 2.子类的普通构造器不能向上调用父类的可能失败的构造器 3.子类的可能失败的构造器可以调用父类的可能失败的构造器 */ class Person { var n…
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同时这这里我们需要注意以下两点:  A.方法重载与返回值类型没有任何关系;  B.方法重载与是否有static修饰没有任何关系. 那我们如何才能确定到底调用的哪个方法呢?  A.主调者:明确是谁在调用这个方法,是类还是对象  B.方法名和形参:确定调用哪个方法(由方法名和形参共同决定) 例1: pub…
Java利用反射机制访问私有化构造器 博客分类: java   我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有私有构造器的类实例化出对象. 在java的反射机制中,可以通过Class.forName(类名).newInstance()来实例化一个对象,还可以获取类的所有方法和构造方法. Constructor这个类,表示类构造器,即构造方法.在生成类对象的时候,会调用构造方法. //例子程序 import …
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静态工厂方法有以下几大优势. 优势1.静态工厂方法的名称,因此比构造器更准确地描述返回的实例. 比如BigInteger.probablePrime方法: public static BigInteger probablePrime(int bitLength, Random rnd) { if (b…
面向对象的特性二继承: 继承的好处: 1.减少代码的冗余.提高了代码的复用性 2.便于功能的扩展 3.为之后多态的使用,提供了前提 继承的格式: class A extends B{} A:子类.派生类.subclass B:父类.超类.基类.superclass 体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法. 特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构. 只有因为封装性的影响,使得子类不能直接调用父类的结构…
每天进步一点点,距离大腿又近一步! 阅读本文大概需要10分钟 java小心机,为你诉说java鲜为人知的一面 涉及基本数据类型的重载 基本类型能从一个"较小"的类型自动提升到"较大"的类型(扩展转换),此过程一旦牵涉到重载,可能就会造成一些混淆 看下以下例子,你是否清楚地知道答案? import static java.lang.System.*; public class PrimitiveOverLoading { public static void f1(c…
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Debug. 本文主要介绍一个使用反射一定会遇到的问题-反射调用异常处理. 反射调用异常处理 反射调用出现异常的方法主要考虑下面的情况: 属性操作:java.lang.reflect.Field#set(Object obj, Object value)和java.lang.reflect.Fiel…
从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) //仅给name赋值 { this.name=name; } dog(String name,String color) //仅给name,color赋值 { this.name=name;//但之前有过类似代码 this.color=color; } dog(String name,String co…