构造方法

抽象类的构造方法

独自空忆成欢 提交于 2019-12-07 06:54:48
首先要说明的是:抽象类中可以定义构造方法。 在之前认为:1,抽象类是不能实例化的;2,定义抽象类肯定是用来实例化的;3,抽象类中没有构造函数。 这三句话第一句肯定是正确的,第二句和第三句呢,定义抽象类一定要用来继承使用吗?抽象类中没有构造函数吗? (这两个问题会在下面详细解答) 1,抽象类不继承直接用。 就拿前段时间做的图书馆维修管理系统中SqlHelper说吧 代码如下: /// <summary> /// 数据访问抽象类 /// </summary> public abstract class SqlHelper { //数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现. public static string connectionString = ConnectionString; ///<summary> ///非查询操作 ///</summary> public static Boolean ExecuteSQL... ///<summary> ///查询操作 ///</summary> public static DateTable ExecuteQuery... } 这样在D层中,就可以直接用抽象类SqlHelper中的方法啦。 这样做有什么好处:1,抽象类直接使用省去了实例化。(分析内存知

jvm(九):类加载机制

一世执手 提交于 2019-12-06 16:51:07
当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析、运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制。JVM 虚拟机执行 class 字节码的过程可以分为七个阶段: 加载、验证、准备、解析、初始化、使用、卸载。 在开始聊之前,先给大家看一道面试题。 class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa { static { System.out.println("爸爸在静态代码块"); } public static int factor = 25; public Father() { System.out.println("我是爸爸~"); } } class Son extends Father { static { System.out.println("儿子在静态代码块"); } public Son() { System.out.println("我是儿子~"); } } public class InitializationDemo { public static void main(String[] args) { System.out.println("爸爸的岁数:" + Son

lombok + slf4j + log4j2

眉间皱痕 提交于 2019-12-06 16:50:59
1.lombok插件介绍   参考   https://blog.csdn.net/a2267378/article/details/81180373 , https://www.cnblogs.com/heyonggang/p/8638374.html 2.安装   jar包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> <scope>provided</scope> </dependency>   IDEA需要同时下载插件   选择从浏览器下载,安装后重启即可 3.使用 import lombok.extern.slf4j.Slf4j; @Slf4j public class Test1 { public static void main(String[] args) { log.trace("trace11111111111"); log.debug("debug11111111"); log.info("ino11111111111"); log.warn("dddddddddddddddddd"); log.error("eeeeeeeeeeeeeeeee"); try { int a=1/0; }

Java lambda表达式

廉价感情. 提交于 2019-12-06 16:43:13
Lambda表达式的介绍 Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、 遍历、过滤数据的操作。 Lambda表达式的特点 1:函数式编程 2:参数类型自动推断 3:代码量少,简洁 Lambda表达式案例 Lambda表达式应用场景 任何有函数式接口的地方 函数式接口 只有一个抽象方法(Object类中的方法除外)的接口是函数式接口 Supplier 代表一个输出 Consumer 代表一个输入 BiConsumer 代表两个输入 Function 代表一个输入,一个输出(一般输入和输出是不同类型的) UnaryOperator 代表一个输入,一个输出(输入和输出是相同类型的) BiFunction 代表两个输入,一个输出(一般输入和输出是不同类型的) BinaryOperator 代表两个输入,一个输出(输入和输出是相同类型的) 方法的引用 方法引用是用来直接访问类或者实例的已经存在的方法或者构造 方法,方法引用提供了一种引用而不执行方法的方式,如果抽象 方法的实现恰好可以使用调用另外一个方法来实现,就有可能可 以使用方法引用 方法引用的分类 静态方法引用:如果函数式接口的实现恰好可以通过调用一个静 态方法来实现

Java第4章学习总结

穿精又带淫゛_ 提交于 2019-12-06 13:22:00
第4章 类与对象 4.1编程语言的几个发展阶段 面向对象编程的三个特性:封装性、继承、多态 4.2类 ①类的定义包括类声明和类体 class 类名{ 类体的内容 } class是关键字,用来定义类。 “class 类名”是类的声明部分。 ②成员变量在整个类内都有效 ③局部变量没有默认值 局部变量的名字可以与成员变量的名字相同,若想要在该方法中使用被隐藏的成员变量,必须使用关键字this。 4.3构造方法与对象的创建 ①类中的构造方法的名字必须与它所在类的名字完全相同,而且没有类型。 4.4类与程序的基本结构 4.5参数传值 在java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。 4.7实例成员与类成员 代码调试中的问题和解决过程 来源: CSDN 作者: 今天也想吃冰淇淋 链接: https://blog.csdn.net/qq920896923/article/details/83052119

JavaSE面向对象-封装

五迷三道 提交于 2019-12-06 12:56:09
一.面向对象的三大特性 说起Java的面向对象,大家想到的都应该是面向对象的三大特征,封装,继承,多态,这里就总结一下面向对象的封装一些知识. 1.封装的概念: 面向对象是一个抽象的,个人认为是对类的一个提升,提取和抽象化,而一些东西你提取了之后,又不想让别人随意的更改,那么你就需要对这个信息就行隐藏,那么这个时候就需要封装。 封装的好处: 1.提高安全性,把不必要的信息隐藏 2.加强对成员属性的控制,提高易用性 3.代码更加的简洁,提高代码的复用性和可读性 因为有封装问题,所以会有一些权限修饰符,在Java中现在就我们涉及的权限修饰符不是很多,有以下几个: public --->公开的,权限最大的修饰符。 protected ---->受保护的,子类和本类,如果是在另外一个包中的子类,也可以使用protected修饰的父类内容 default ---->默认权限,包中有效 private ---->私有化权限,只能在本类使用 上面几个权限修饰符,修饰类,方法和属性。 get和set方法 在封装的时候,在封装一些信息的时候,对属性进行了private修饰,所以不能够直接去访问,这时候我们就需要提供一个接口来对外提供一个入口,就会用到get和set方法: set //获得值 比如说: private int age; // get public void set age (){

javase阶段考试二(面向对象阶段)测试题及答案

若如初见. 提交于 2019-12-06 12:53:36
一、 简答题(每题 5 分,共计 40 分) 1. 什么是类?什么是对象?类与对象的关系是什么? 类简单来说就是 " 分类 " ,是多个对象共性提取的抽象描述,在 Java 中是一种引用数据类型,里面包含了描述特征的成员变量,以及描述行为的成员方法。 类是一种抽象的概念,用于描述对象创建的模板,而对象是客观存在的实体,本质上就是内存空间中的一块区域,对象的数据结构取决于类。 2. 请写出类、属性、行为以及引用和对象声明的语法格式。 class 类名 { 数据类型 成员变量名 ; 返回值类型 方法名称 ( 形式参数列表 ){ 方法体; } } 类类型 对象名 = new 类类型 (); 3. 简述构造方法的语法形式以及主要特点。 class 类名 { 类名 ( 形参列表 ){ 构造方法体 ; } } a 构造方法的名称与类名完全相同; b. 构造方法没有返回值类型,连 void 都不能写; c. 构造方法用于在创建对象时被自动调用,从而实现该对象成员变量的初始化工作; 4. this 关键字的基本概念和常见使用场合是什么? 在构造方法中, this 代表当前正在构造的对象。 在普通方法中, this 代表当前正在调用的对象,也就是调用对象。 当形参名 / 局部变量和属性同名时,需要使用 this 关键字通过 . 来明确表示属性变量,从而提高代码的可读性和正确性

ABAP学习(14):ABAP面向对象

一曲冷凌霜 提交于 2019-12-06 10:52:33
ABAP面向对象 1、类的定义与实现 类定义: 语法:Class <类名> definition. Public section. Methods:<方法名> Importing <参数名> type <参数类型> Exporting <参数名> type <参数类型>. Endclass. 类实现: 语法:Class <类名> implementation. Public section. Method <方法名>. 实现具体代码块. Endmethod. Endclass. 2、抽象类 抽象类定义,抽象方法定义,使用Abstract关键字。 示例: "抽象类定义 "抽象类可以包含静态成员 class-data ,class-methods,class-events "抽象类可以包含非抽象方法 "抽象类可以不定义任何方法 "抽象类 不可以create object 创建实例,但是可以用create object type ref to 创建抽象类引用,并接受子类实例 CLASS base_class DEFINITION ABSTRACT. "抽象类 关键子abstract,基类 PUBLIC SECTION. METHODS:message ABSTRACT "抽象方法 IMPORTING msg TYPE String OPTIONAL. METHODS:sayHello

Java期末小练

一个人想着一个人 提交于 2019-12-06 10:27:37
题目: 自定义一个异常类StyleException类: StyleException类继承Exception类,类中有一个无参和一个接收String类型参数的构造方法,构造方法中都使用super关键字调用父类的构造方法。 编写测试类Test: 包含2个方法:main和void transfer(int x), void transfer(int x)方法中,当传入的x的值在大于500或者小于0时就用throw产生一个NoTransferException的异常对象,信息为“你输入数字超出范围,无法转换”。 main方法中调用find方法,并传入大于500的参数,用try…catch语句捕获异常,并在catch语句中用PrintStackTrace方法输出异常信息。 分析: 创建自定义异常类StyleException并继承Exception StyleException类内创建一个无参和有参的构造函数()均使用super()方法 在主函数中使用try…catch语句捕获异常并调用find方法(在主函数内创建一个,注意需使用throws抛出异常) 参考代码如下图所示: class StyleException extends Exception{ public StyleException(){ super(); } public StyleException(String

面向对象基础

北战南征 提交于 2019-12-06 07:12:32
1. 三大特征 1.1 封装 1.2 继承(extends) 1.2.1 父类 1.2.2 子类 1.子类在同一个包下面能够范文父类除了私有private修饰的所有属性和方法 2.在不同包下面,子类对象只能访问public修饰的属性和方法 3.在子类内部,如果不同包的情况下,可以访问protected修饰的属性和方法,但是不能访问默认的访问修饰符修饰的属性和方法 4.子类在初始化的时候会先调用父类的默认不带参数构造器,如果没有,就会报错,我们只有人为的修改 (1).将父类添加一个无参数的构造器 (2).在子类构造器中手动使用super()声明调用哪个父类的构造器 1.3 多态 2. 类 2.1属性,成员变量,全局变量 当对象初始化之后,成员变量就会有初始值 String null 整型 0 浮点型 0.0 boolean false char (char)0 局部变量 1.定义的位置不一样 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一样 局部变量:没有默认值,如果想要使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样 4.内存的位置不一样 局部变量:位于栈内存 成员变量,位于堆内存。 5.生命周期不一样 局部变量