构造器

Java 继承

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

java创建对象的几种方式

。_饼干妹妹 提交于 2020-03-23 18:53:03
前言,今日面试被问到创建对象是否一定要通过构造器,当时回答错误,查询分析后记录。 创建对象的几种方式: 第一种,也是最常用、一直接触到的方法:通过new 创建对象。这种方法需要用到构造器    Demo demo1=new Demo();    Demo demo2=new Demo(1,"有参构造器"); 第二种,比较常用的的方法: 通过反射 newInstance()创建对象。 这种方法用到构造器   Demo demo2=(Demo) Class.forName("Demo").newInstance(); 第三种,通过object类的clone方法。 需要实现Cloneable接口,重写object类的clone方法。无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。 用clone方法创建对象并不会调用任何构造函数。(原型模式,还没了解)   Demo demo4=(Demo) demo2.clone(); 第四种,反序列化。 java 中常常进行 JSON 数据跟 Java 对象之间的转换,即序列化和反序列化。 当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象,在反序列化时,JVM创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现Serializable接口,虽然该接口没有任何方法

学习Java的第八天

霸气de小男生 提交于 2020-03-22 12:49:33
学习Java的第八天 抽象类和抽象方法 用abstract关键字来修饰一个类,这个类叫做抽象类。 用abstract来修饰一个方法,该方法叫做抽象方法。 抽象方法:只有方法的声明,没有方法的实现。以分号结束: 比如:public abstract void talk(); 含有抽象方法的类必须被声明为抽象类。 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重 写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍 为抽象类。 不能用abstract修饰变量、代码块、构造器; 不能用abstract修饰私有方法、静态方法、final的方法、final的类。 匿名类 格式: 抽象类创建实例在最右侧加上大括号 并且对抽象方法进行重写 模板方法设计模式 在软件开发中实现一个算法时,整体步骤很固定、通用, 这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽 象出来,供不同子类实现。这就是一种模板模式 接口 why: 一方面,有时必须从几个类中派生出一个子类,继承它们所有的属性和方 法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。 另一方面,有时必须从几个类中抽取出一些共同的行为特征,而它们之间又 没有is-a的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打 印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都

JavaScript设计模式与开发实践---读书笔记(2) this、call和apply

安稳与你 提交于 2020-03-21 23:33:30
this、call和apply this的指向: this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。 1.作为对象的方法被调用 当函数作为对象的方法被调用时,this指向该对象 2.作为普通函数调用 此时的this总是指向全局对象。在浏览器的JavaScript里,这个全局对象是window对象。 有时候,我们希望div节点事件函数内部的this指向该div节点,可以用一个变量保存div节点的引用: var that = this; 在ES5的严格模式下,这种情况下的this已被规定为不会指向全局对象,而是undefined 3.构造器调用 构造器的外表跟普通函数一模一样,它们的区别在于被调用的方式。当用new运算符调用运算符时,该函数总会返回一个对象,通常情况下,构造器里的this就指向返回的这个对象。 注意:使用new调用构造器时,还要注意一个问题,如果构造器显式地返回了一个object类型的对象,那么此次运算结果最终会返回这个对象,而不是我们之前期待的this。 4.Function.prototype.call或Function.prototype.apply调用 用Function.prototype.call或Function.prototype.apply可以动态的改变传入函数的this。 丢失的this

Java方法的嵌套与递归调用

一世执手 提交于 2020-03-21 17:50:22
Java方法的嵌套与递归调用 本文关键字:方法、嵌套、递归、经典问题 一、方法的嵌套 1. 概念解读 方法嵌套的概念其实比较好理解,就是在调用方法的过程中又遇到了方法的调用,在刚开始接触的时候虽然在逻辑上能够理解为什么运行结果是这样的,但是对于代码执行的过程还是感觉有些绕。 2. 方法嵌套 在编程中最常见的就是方法与方法之间的调用嵌套,因为通常情况下,我们解决一个问题不会只靠一个方法。而且如果一个方法所提供的功能十分强大,那势必其中的代码逻辑和参数列表也会变的相对复杂,不利于修改和使用,所以我们希望,每个方法都是一个个小小的利刃,用来解决特定的问题,通过组合使用的方式来完成一个较为复杂的功能,就像雷恩的七星刀一样。 比如,我们已经有了两个方法:分别用于计算圆的面积和计算矩形的面积,如果我们现在需要算一个圆柱的表面积,我们还需要把整个方法重写一遍吗?当然不需要,因为圆柱的表面积的计算刚好可以通过两个圆柱底面积(圆)加圆柱侧面积(矩形)得到,我们只需要合理的传入参数和进行值的返回即可实现。 public class Test{ public static void main(String[] args){ // 计算一个圆柱的面积,已知底面半径和高 int radius = 5; int height = 10; // 调用计算圆柱表面积 double area =

注解实现Bean依赖注入

▼魔方 西西 提交于 2020-03-21 05:29:29
12.2.1 概述 注解实现Bean配置主要用来进行如依赖注入、生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义, 且基于 XML 配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据 。 Spring3的基于注解实现Bean依赖注入支持如下三种注解: Spring 自带依赖注入注解: Spring自带的一套依赖注入注解; JSR-250 注解: Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.5开始支持。 JSR-330 注解 :Java 依赖注入标准,Java EE 6规范之一,可能在加入到未来JDK版本,从Spring3开始支持; JPA 注解: 用于注入持久化上下文和尸体管理器。 这三种类型的注解在Spring3中都支持,类似于注解事务支持,想要使用这些注解需要在Spring容器中开启注解驱动支持,即使用如下配置方式开启: java代码: Java代码 <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:context= "http://www.springframework.org/schema/context

设计模式

烂漫一生 提交于 2020-03-20 14:53:38
3 月,跳不动了?>>> 在软件工程中, 创建型模式 是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。 常用创建型模式有:单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式 一、单例模式 单例模式有以下8种写法: 饿汉式: 静态常量 静态代码块 懒汉式: 线程不安全 线程安全,同步方法 线程安全,同步代码块 双重检查 静态内部类 枚举 单例模式的使用场景: 需要频繁创建和销毁的对象;创建时耗时过多或消耗资源过多,但又经常用到的对象(比如session工厂、数据源等) 1. 饿汉式 - 静态常量写法 代码实现: /** * 设计模式之单例模式 * 饿汉式(静态常量) */ public class SingletonTest01 { public static void main(String[] args) { Singleton instance1 = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println("两次获取的实例一样吗:" + (instance1 == instance2)); //true } } class

面向对象基本

只愿长相守 提交于 2020-03-19 12:53:25
对象:是具体的事物 类:是对对象的抽象 内存分析 栈: 每个线程私有,不能实现线程间的共享! 局部变量放置于栈中。 栈是由系统自动分配,速度快!栈是一个连续的内存空间! 堆: 放置 new 出来的对象! 堆是一个不连续的内存空间,分配灵活,速度慢! 方法区: 被所有线程共享! 用来存放程序中 永远是不变或唯一 的内容。(类代码信息、静态变量、字符串常量) 属性( field ,或者叫成员变量) 属性用于定义该类或该类对象包含的数据或者说静态属性。 属性作用范围是整个类体 在定义成员变量时可以对其初始化,如果不对其初始化,Java 使用默认的值对其初始化。 ( 数值: 0,0.0 char:\u0000, boolean:false, 所有引用类型 :null) 属性定义格式: [ 修饰符 ] 属性类型 属性名 = [ 默认值 ] 引用类型 Java 语言中除基本类型之外的变量类型 都称之为引用类型。 Java 中的对象是通过引用对其操作的 . 类的方法 方法则用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序有一个个函数调用组成; 面向对象中,整个程序的基本单位是类,方法是从属于类的。 方法定义格式: [ 修饰符 ] 方法返回值类型 方法名 ( 形参列表 ) { // n 条语句 }

关于内部类的剖析

◇◆丶佛笑我妖孽 提交于 2020-03-18 14:57:06
内部类根据使用不同的修饰符或者定位的位置不同,可以分为四种: ①  实例内部类:   内部类没有使用static修饰 ②  静态内部类:   内部类使用了static修饰 ③  局部内部类:   在方法中定义的内部类 ④  匿名内部类:   适合于仅使用一次的类,属于局部内部类的特殊情况 外部类的访问修饰符: 要么用public,要么缺省。 内部类看作是外部类的一个成员,好比字段,那么 内部类可以使用public/缺省/protected/private修饰 还可以是static修饰 ------------------------------------------------------------------------------ 实例内部类: 没有使用static修饰内部类,说明内部类属于外部类的对象,而不是属于外部类。 特点: 1: 创建实例内部类前,必须存在外部类对象,通过外部类对象创建内部类对象(当存在内部类对象时,一定存在外部类对象) 1 public class InstanceClass { 2 3 //创建一个内部类对象 4 Outter.Inner inner = new Outter().new Inner();//方法一 5 //创建一个内部类对象 6 Outter outter = new Outter(); 7 Outter.Inner

Vue2.0 【第四季】第3节 实例事件

我的梦境 提交于 2020-03-17 14:56:26
目录 Vue2.0 【第四季】第3节 实例事件 第3节 实例事件 一、$on 在构造器外部添加事件 二、$once执行一次的事件 三、$off关闭事件 Vue2.0 【第四季】第3节 实例事件 第3节 实例事件 实例事件就是在构造器外部写一个调用构造器内部的方法。这样写的好处是可以通过这种写法在构造器外部调用构造器内部的数据。 我们还是写一个点击按钮,持续加1的例子。 一、$on 在构造器外部添加事件 app.$on('reduce',function(){ console.log('执行了reduce()'); this.num--; }); $on接收两个参数,第一个参数是调用时的事件名称,第二个参数是一个匿名方法。 如果按钮在作用域外部,可以利用$emit来执行。 //外部调用内部事件 function reduce(){ app.$emit('reduce'); } 全部代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>example03</title> <script type="text/javascript" src="..