构造器

Java核心技术-5-继承

你离开我真会死。 提交于 2019-12-17 01:53:43
5 继 承 5.1 类、超类和子类 用super访问父类。 由于子类无法直接访问超类的私有域,所以子类对超类私有域的初始化必须调用超类的构造器。 如果子类的构造器没有显式调用超类的构造器,则自动调用超类的无参构造器。 this用途:一是引用隐式参数,二是调用该类的其他构造器。 super用途:一是调用超类的方法,二是调用超类的构造器。 一个对象变量可以指示多种实际类型的对象被称为多态。在运行时能够自动选择调用哪个方法被称为动态绑定。 1 继承层次 由一个公共超类派生出来的所有类的集合被称为继承层次。 2 多态 程序中出现超类对象的任何地方都可以用子类对象置换。 3 动态绑定 当调用的方法是private、static、final或者构造器,编译器可以准确知道应该调用哪个方法,这种调用方式叫做 静态绑定 。 相对的,动态绑定只针对于public方法,虚拟机调用与x所引用对象的 实际类型 最合适的那个类的方法。 虚拟机预先为每个类创建了一个 方法表 ,其中列出了所有方法的签名和实际调用的方法。 在覆盖方法的时候,子类方法不能低于超类方法的可见性。 4 阻止继承:final类和方法 final类不允许扩展。 5 强制类型转换 进行类型转换的原因:在暂时忽视对象的实际类型之后(使用超类的引用指向,进行一些通用操作),使用对象的全部功能(强制转换为具体的子类引用,执行子类的操作)。

Java的反射机理

这一生的挚爱 提交于 2019-12-16 10:54:32
Java反射是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的全部属性和方法等,调用方法以及访问属性,而且不需要提前在编译期知道运行的对象是什么,他允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。 Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method; 其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组成部分。 Java反射的作用: 在Java运行时环境中,对于任意一个类,可以知道这个类有哪些属性和方法。对于任意一个对象,可以调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。 Java 反射机制主要提供了以下功能 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法。 反射的常用类和函数:Java反射机制的实现要借助于4个类:Class,Constructor,Field,Method; 其中class代表的是类对象,Constructor-类的构造器对象,Field

Lombok 快速入门--常用注解

元气小坏坏 提交于 2019-12-15 22:24:03
一、 Lombok 介绍   Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。   Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。   Lombok的使用跟引用jar包一样,可以在官网(https://projectlombok.org/download)下载jar包,也可以使用maven添加依赖: < ! -- lombok 依赖 -- > < dependency > < groupId > org . projectlombok < / groupId > < artifactId > lombok < / artifactId > < version > 1.16 .10 < / version > <

Bean的构造器注入和setter注入

三世轮回 提交于 2019-12-15 17:41:48
链接:https://pan.baidu.com/s/1vixLrr8harzZMwLsIB1Mwg 提取码:ou1n 首先要明白,为什么要注入? IOC容器会在初始化时,创建好所有的bean对象的实例(懒汉模式除外: https://www.cnblogs.com/ABKing/p/12044025.html ) 这就带来一个问题,当bean中只有方法的时候还不会出问题。 但是如果bean中还有属性呢? 这就是属性注入的出现原因了。为了对bean的属性进行赋值,我们引入了注入的概念 0x00 构造器注入 配置文件中写入: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 <bean class="top.bigking.bean.Book" id="book">

一、7(1)java面向对象编程{java继承}

微笑、不失礼 提交于 2019-12-15 11:37:51
Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 生活中的继承: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。 类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: 类的继承格式 class 父类 { } class 子类 extends 父类 { } 为什么需要继承 接下来我们通过实例来说明这个需求。 开发动物类,其中动物分别为企鹅以及老鼠,要求如下: 企鹅:属性(姓名,id),方法(吃,睡,自我介绍) 老鼠:属性(姓名,id),方法(吃,睡,自我介绍) 企鹅类: public class Penguin { private String name; private int id; public Penguin(String myName, int myid) { name = myName; id = myid; }

对构造器参数问题的思考

删除回忆录丶 提交于 2019-12-15 09:43:27
前言 构造器的问题应该还是比较重要的,因为我们要设置合理的构造函数暴露出来生成对象。 在我看来,构造器的设置还是需要慎重考虑的,所以以我愚见,结合自己写过的一些代码,对这个问题进行一下分析。 设计模式之——单例模式 (下面的代码为懒汉式、线程非安全) public class MedicineInfoMapper implements IFileSerialization < AllMedicinesMap > { private MedicineInfoMapper ( ) { } private static MedicineInfoMapper mapper ; /** * 获取单例 * @return 单例 */ public static MedicineInfoMapper getInstance ( ) { if ( mapper == null ) { mapper = new MedicineInfoMapper ( ) ; } return mapper ; } /** * 反序列化从文件中读取PatientList的序列化对象 */ @Override public AllMedicinesMap readObject ( ) { try ( ObjectInputStream ois = new ObjectInputStream ( new

Java学习笔记2------对象与类

妖精的绣舞 提交于 2019-12-15 07:23:39
学习《Java核心数据》(原书第十版)的笔记------第四章 1、类是构造对象的模板或蓝图 2、 封装 (encapsulation)亦称数据隐藏,是面向对象的重要概念 3、对象中数据叫做 实例域 ,操纵数据的过程称为 方法 4、 实现封装的关键在于绝对不能让其他类访问本类的实例域 5、类和类之间最 常见的关系 有:聚合(has-a),依赖(using-a),继承(is-a) 6、使用构造器获得类的新的实例;需要使用 new关键字 来调用构造器;构造器的名字应该与类名相同; 7、如果没有写构造器,则系统将自动为类生成一个构造器,将所有的值设置为默认值,基本数据类型设置为0,boolean设置为false,对象设置为null 8、如果提供了带参数的构造器,那么将不能默认使用不带参数的构造器进行构造,否则将会报错 9、对象与对象变量的区别:对象是存储在内存中的一个实际存在的内存区域, 对象变量实际上只是对象的引用 。 10、如果在定义对象变量是不知道要引用什么对象,那么 应该初始化为null 11、java中=符号对对象变量进行赋值时将进行 引用赋值 ,需要真的进行拷贝,需要使用clone()函数 12、java类库的Date类并不是一个安全的函数,它允许使用函数修改关键的数值------距离现在的秒数。java官方不推荐使用。应当使用LocalDate对象 13

什么是反射?

徘徊边缘 提交于 2019-12-14 16:47:11
一、反射的定义 本文基于 JDK8, Oracle官网 对反射的解释是 Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control. 反射使 Java 代码可以发现有关已加载类的字段,方法和构造函数的信息,并在安全性限制内使用反射对这些字段,方法和构造函数进行操作。 简而言之,指在

28道java基础面试题-上

可紊 提交于 2019-12-14 08:52:49
【软帝学院】28道java基础面试题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的

java反射与代理

为君一笑 提交于 2019-12-14 06:19:37
反射:框架设计的灵魂 一、反射概念 1.1 框架 半成品软件。可以在框架的基础上进行软件开发,简化编码。学习框架并不需要了解反射,但是要是想自己写一个框架,那么就要对反射机制有很深入的了解。 1.2 反射 反射机制:将类的各个组成部分封装为其他对象,这就是反射机制。 反射的好处: 1.可以在程序运行过程中,操作这些对象。 2.可以解耦,提高程序的可扩展性。 Java代码在计算机中经历的三个阶段 (1)Source源代码阶段: .java被编译成 .class字节码文件。 (2)Class类对象阶段: .class字节码文件被类加载器加载进内存,并将其封装成Class对象(用于在内存中描述字节码文件),Class对象将原字节码文件中的成员变量抽取出来封装成数组Field[],将原字节码文件中的构造函数抽取出来封装成数组Construction[],在将成员方法封装成Method[]。当然Class类内不止这三个,还封装了很多,我们常用的就这三个。 (3)RunTime运行时阶段:创建对象的过程new。 二、获取Class对象的方式 2.1 获取Class对象的三种方式对应着java代码在计算机中的三个阶段 (1)【Source源代码阶段】 Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象 * 多用于配置文件,将类名定义在配置文件中。读取文件,加载类