构造方法

9-构造函数、对象特性继承

…衆ロ難τιáo~ 提交于 2019-11-30 02:45:51
目录 构造函数、继承 构造函数 继承 继承体系中的注意事项 构造函数、继承 构造函数 作用: 创建对象 基于优先执行的特点,可以在构造函数中完成基础配置 在创建对象的同时,为属性进行初始化 特点: 无返回类型,void都不能写 方法名与类名相同(完全一样) 构造函数优先于类中方法的执行,且每次创建对象都会执行 注: 每个类都有一个隐式的无参的没有方法体的构造函数 构造函数的重载 概念:多个构造函数具有不同的参数列表 细节: 使用this来区分成员和局部。 无论属性有多少个,一般重载构造函数都会写上全部的属性。 如果构造函数重载了,那么默认的构造函数就不存在了。 如果还想要通过无参的默认构造函数来创建对象,必须手动写出。 标准实体类的写法: 私有化的属性 无参的构造函数 全参的构造函数 属性的set/get方法 继承 概念: 子类可以直接访问父类的(非私有)成员(方法和变量)。 继承主要研究的就是子类内容的共性抽取,前提是符合逻辑的向上抽取。 好处: 提高了代码的复用性 提供了多态的前提 父类:超类、基类 子类:派生类、衍生类 格式: class 子类 extends 父类{ } 注意: 子类 就是 父类 狗 就是 动物 子类是它自己的同时也是父类。 子类可以具备特性内容 继承关系中成员变量的特点 特点: 子类优先使用本类中的变量,如果没有则向上查找父类中是否有该变量,有则使用

n的阶乘

佐手、 提交于 2019-11-30 02:08:52
1 编写一个类Computer,类中含有一个求n的阶乘的方法。将该类打包,并在另一包中的Java文件App.java中引入包,在主类中定义Computer类的对象,调用求n的阶乘的方法(n值由参数决定),并将结果输出。 代码 computer类 package com.ws.www; public class Computer { public int Factorial(int n) { int product = 1; if (n == 1) product *= n; else { product = n * Factorial(n - 1); } return product; } } APP package com.ws.www; import com.ws.www.Computer; public class App { public static void main(String[] args) { Computer c=new Computer(); System.out.println("6的阶乘为"+c.Factorial(6)); } } 运行 2 设计一个MyPoint类,表示一个具有x坐标和y坐标的点,该类包括: 两个私有成员变量x和y表示坐标值; 成员变量x和y的访问器和修改器 无参构造方法创建点(0,0); 一个有参构造方法,根据参数指定坐标创建一个点

Java的自定义异常

天涯浪子 提交于 2019-11-30 00:46:59
Java标准库定义的常用异常包括: 当我们在代码中需要抛出异常时,尽量使用JDK已定义的异常类型。例如,参数检查不合法,应该抛出 IllegalArgumentException : static void process1 ( int age ) { if ( age <= 0 ) { throw new IllegalArgumentException ( ) ; } } 在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。 一个常见的做法是自定义一个 BaseException 作为“ 根异常 ”,然后,派生出各种业务类型的异常。 BaseException 需要从一个适合的 Exception 派生,通常建议从 RuntimeException 派生: public class BaseException extends RuntimeException { } 其他业务类型的异常就可以从 BaseException 派生: public class UserNotFoundException extends BaseException { } public class LoginFailedException extends BaseException { } . . . 自定义的 BaseException 应该提供多个构造方法:

Java自定义异常类

假装没事ソ 提交于 2019-11-30 00:24:33
Java自定义异常类   尽管Java已经预定义了许多异常类,但有时还需要定义自己的异常。编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。常用的编写自定义异常类的模式如下:   当然也可选用Throwable作为父类。其中无参数构造方法为创建缺省参数对象提供了方便。第二个构造方法将在创建这个异常对象时提供描述这个异常信息的字符串,通过调用超类构造方法向上传递给父类,对父类中的toString()方法中返回的原有信息进行覆盖。   下面举个具体例子,假设程序中需要验证用户输入的数据值必须是正值。可以按照上面的模式编写自定义异常类如下:   有了上述自定义异常类,在程序中就能使用它。   假设编写程序要求用户输入圆半径,计算圆面积。该程序要求半径值应该为正值。程序代码如下:   运行程序,假设输入一个负值,程序会抛出 NegativeValueException 异常。 来源: https://www.cnblogs.com/yqcg/p/11541571.html

ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者

假装没事ソ 提交于 2019-11-29 21:38:54
本文翻译自: https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel-8fabfec1aa4f 朋友们好,今天我向大家介绍下 ViewModel 中如何使用 ViewModelProvider.Factory. 现在开始 所以,我们首要问题是:什么是 ViewModelProvider.Factory ?让我们在不使用 ViewModelProvider.Factory 的情况下,试着创建一个 ViewModel 看看: 在活动中实例化: 有没有人注意到:当我们使用 ViewModelProviders 在活动中实例化 MyViewModel 时,从未没用过 MyViewModel 的构造方法,而都是使用 ViewModelProviders 这个类中的方法。ViewModelProviders 在内部为我们管理并调用 ViewModel 的主构造函数,创建viewmodel的实例并将该实例并返回。 那么,现在让我们看看,如果我们直接把参数传递给 MyViewModel 类的构造方法时会发生了什么: 现在,我们在活动中创建 MyViewModel 实例: 太棒了!没有发生任何错误 但是,等等。 当你运行上面这段代码的时候,你收到了

@Autowired的使用--Spring规范解释,推荐对构造函数进行注释

痴心易碎 提交于 2019-11-29 21:30:44
一 在编写代码的时候,使用@Autowired注解是,发现IDE报的一个警告,如下: Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies. 翻译: Spring建议,总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖。 那么是为什么呢? 二 我们可以理一下java的基础点,不考虑父类,初始化的顺序 静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired ps. 静态变量或静态语句块 的初始化顺序是自上到下的顺序,被老大问到了... 三 好的,有了上面的铺垫,我们来看看下面的代码。 @Autowired private User user; private School school; public UserServiceImpl(){ this.school.id = user.getSchoolId(); } 由于java先执行构造方法,导致 this.school = user.getSchool(); 报空指针异常(虽然这个例子正常人都不会这样写... 解决办法就是使用构造器注入了 private User

代理模式

拜拜、爱过 提交于 2019-11-29 20:57:07
一. 静态代理 代理类和委托类都实现接口,但是代理类的方法的具体实现是在委托类中实现的,代理类仅仅是调用委托类的方法,并在委托类方法调用之前或者之后或者出现异常时添加一些额外的功能。客户类只需获得一个有代理类实现接口的对象,使用该对象中的方法即可。 二. JDK动态代理 使用方式: Java在java.lang.reflect.proxy下实现了代理类。 首先委托类实现接口中的方法,然后需要定义一个类MyClass实现了InteceptorHandler接口,该接口中只有一个方法为 在MyClass类中将invoke方法实现其中的proxy为代理对象实例,method为当前proxy对象被代理的方法,args为被代理方法所需的参数。 创建好该InteceptorHandler的实现类后,接下来需要通过Proxy类下的newProxyInstance方法来创建代理类。 Loader为当前目标对象使用的类加载器,获取加载器的方法是固定的。Interfaces 指定当前目标对象实现的接口的类型,使用泛型方式确认类型 H 指定动态处理器,执行目标对象的方法时,会触发事件处理器的方法,即invoke方法。 动态代理实现的原理: 通过newProxyInstance方法创建一个代理类的字节码文件,并由jvm运行该文件创建一个代理类的对象并返回

面向对象

浪尽此生 提交于 2019-11-29 17:40:55
面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象和面向过程的基本概念,面向对象的特征,Java语言的类,对象,修饰符,抽象类等一系列的知识点 首先让我们来了解一下什么是对象? 没错!要了解面向对象我们肯定需要先知道对象到底是什么玩意儿。关于对象的理解很简单,在我们的身边,每一种事物的存在都是一种对象。总结为一句话也就是:对象就是事物存在的实体。下面举个简单的例子,比如人类就是一个对象,然而对象是有属性和方法的,那么身高,体重,年龄,姓名,性别这些是每个人都有的特征可以概括为属性,当然了我们还会思考,学习,这些行为相当于对象的方法。不过,不同的对象有不同的行为 面向对象的特征 封装:就是把属性私有化,提供公共方法访问私有对象。举个简单的例子,我们去Apple店里买个iPhoneX,我们不需要知道它是怎么制造的,我们只需要知道它能用来打电话,上网和用来装B就行了。对于程序设计,用户只需要知道类中某个方法实现了什么样的功能,需要该功能的时候直接去调用就行了,不用去关心方法内部的实现细节 继承:当多个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它类继承这个父类。继承后子 类自动拥有了父类的属性和方法,比如猫,狗,熊猫他们共同的特征都是动物,有颜色,会跑,会叫等特征

第三周课程总结&实验报告

江枫思渺然 提交于 2019-11-29 17:24:24
了解了认识了java的三个性质: 封装性,继承性和多态性。 构造方法 1.构造方法的名称必须与类名称一致 2.构造方法的声明处不能有任何返回值类型的声明 3.不能再构造方法中使用return返回一个值 学习了关键字其中有this,static等。 作业蛮多的,完成有点困难,相信自己。 实验报告 一.打印输出所有的“水仙花数” 所谓“水仙花数”是指一个三位数,其中各立方和等于该数本身。例如,153是个水仙花数,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 实验代码及结果 二.编写Java程序 求13-23+33-43+.........+973-983+993-1003 实验代码及结果 三. 求1!+ 2! + 3! + 4!.....+ 20! 实验代码及结果 四. 计算8+88+888+8888+.....前十项之和 实验代码及结果 五.找完数 一个数如果恰好等于它的因子之和,这个数就称为完数。编写程序输出1000以为的所有完数 实验代码及结果 六. 输出满足1+2+3+....+n<8888的最大正整数 实验代码及结果 七.用for循环打印下面图形 实验代码及结果 来源: https://www.cnblogs.com/jiajia2333/p/11524355.html

第三周课程总结及实验报告

北战南征 提交于 2019-11-29 17:05:34
班级 计科一班 学号 20188381 姓名 罗宇梁 一、 实验目的 (1) 熟悉JDK开发环境 (2) 熟练掌握结构化程序设计方法 二、 实验内容 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。 编写Java程序,求13-23+33-43+…+973-983+993-1003的值。 编程求1!+2!+3!+…+20!。 编写Java程序,计算8+88+888+…前10项之和。 一个数如果恰好等于它的因子之和,这个数就称为完数。编写程序输出1000以内的所有完数。 编写应用程序,输出满足1+2+3+…+n<8888的最大正整数。 使用for循环打印下面的图形。 三、 实验过程 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。 实验源码: public class Flower { public static void main(String[] args) { int n, a, c, b; for(n=100;n<1000;n++) { a=n%10; c=n/10%10; b=n/100%10; if(n==a*a*a+c*c*c+b*b*b) { System.out.println(n); } } } } 实验结果: 2