构造器

8 继承

十年热恋 提交于 2019-12-10 22:46:39
文章目录 扩展类 重写方法 类型检查和转换 受保护字段和方法 超类的构造 重写字段 匿名子类 抽象类 extends、final关键字与java相同 重写方法必须用override 只有主构造器可以调用超类的主构造器 可以重写字段 本章只介绍继承类,继承特质的后面再探讨 扩展类 扩展类同Java一样,(又是跟Java一样,都不会Java),使用extends关键字 在定义中可以给出子类需要但是超类没有的字段和方法,或者重写超类的方法 当 一个类被声明为final,就不能被继承,字段或方法也是如此 ,声明为final就不能被重写了。在Java中不一样,final字段是不可变的,类似于scala 中的val class Person { val name = "Bob" val age = 1 final var id = 1 def description ( ) = println ( s "${name} ,id:${id} is ${age} years old" ) } class Employee extends Person { var salary = 0.0 override val name = "Saha" override val age : Int = 3 id = 9 override def description ( ) = println ( s "$

Java中的反射机制

时光怂恿深爱的人放手 提交于 2019-12-10 20:24:20
在学习反射机制之前我们先学习一下 什么是动态语言和静态语言? (1)动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被 引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代 码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python等。 (2)静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。 Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性, 我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更 加灵活! 1.反射的基本概念 (1)什么是反射? 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。 (2)反射机制提供的功能? 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 (3)Java反射的优缺点 优点: 可以实现动态创建对象和编译,体现出很大的灵活性 缺点: 对性能有影响。

Java中常用的类

被刻印的时光 ゝ 提交于 2019-12-10 12:30:08
1.java类都是Object类的子类,所有任何Java对象都可以调用Object类的方法。 Object类提供如下常用的方法。boolean equals(Object obj):判断指定对象与该对象是否相等,此处相等时标准的两个对象同一个对象;protected void finalize():当系统中没有变量引用该对象时,垃圾回收器调用此方法来清理该对象的资源。Class<?>getClass():返回该对象的运行时类。int hashCode():返回该对象的hashCode值。String toString():返回该对象的字符串表示。Object类的wait()、notify()、notifyAll()几个方法,这几个方法可以控制线程的暂停和运行。Object类提供的clone()方法使用了protected修饰,因此该方法只能被子类重写或者调用。Object类的clone()方法虽然简单、易用,但它只是一种“浅克隆”,他只克隆该对象的所有变量成员值,但不会对引用类型的成员变量值所引用的对象进行克隆。 2.Objects工具类,它提供了一些工具方法和操作对象,这些工具方法大多是“空指针”安全的。比如说你不能确定一个引用类型是否为null,如果贸然地调用该变量的toString()方法,则会可能引发NullpointerExcetpion异常

Effective Java-创建和销毁对象

自作多情 提交于 2019-12-10 09:42:57
(一) 考虑用静态工厂方法代替构造器 优点 : 1 不需要每次调用静态工厂方法的都创建一个新对象; 例如 : 2 静态工厂方法可以返回原返回类型的任何子类型的对象; 3 提供静态工厂方法可以使得客户端(调用方)代码变得简洁; 缺点 : 1 类如果不包含公有的或者受保护的构造器,就不能被子类化; 2 无法区分静态工厂方法和其它的静态方法; (二) 用私有构造器或者枚举类型强化单例属性 1 私有构造器 : 通过私有构造器可以控制该类的实例化,通过提供静态属性或者静态方法来提供该类的实例; 2 通过编写一个包含单元素的枚举也可以做到类的单例,并且比起私有构造器更加简洁和安全(反射和序列化) 例如: (三) 通过私有构造器强化不可实例化的能力 如果编写只包含静态方法和静态属性的这样工具类,防止这样的工具类被实例化,增加唯一一个私有的构造器。 如 : Math、Arrays等 注:唯一一个私有的构造器类会使得该类不能被子类化; (四) 避免创建不必要的对象 1 重用不可变对象;如String、基本类型的封装类等 例如: String a = “zhangfeng”; // 这样形式 对提供静态工厂方法的要使用静态工厂方法 Boolean.valueOf(true); 对于Integer和Long等不可变对象,不要放到循环里面去改变对象值,会造成创建不必要的对象 2

Java学习笔记(8)---Scanner类,浅谈继承

非 Y 不嫁゛ 提交于 2019-12-10 09:34:09
1.Scanner类: a.定义: java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。 Scanner s = new Scanner ( System . in ) ; 我们可以通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串。 注意hasNext 与 hasNextLine 可以用来判断是否还有输入的数据。 b.next(): if ( scan . hasNext ( ) ) //判断是否有输入 { String str1 = scan . next ( ) ; System . out . println ( " 输入的数据为: " + str1 ) ; } 假如说我们输入是: its me 那么输出就是 its 因为next()只读取有效字符起,到空格之前的字符,并且还会自动去掉那之前的空格。因此对于英语语句来说理论上讲next只获得一个词。 c.nextline(): if ( scan . hasNextLine ( ) ) //判断是否有输入 { String str2 = scan . nextLine ( ) ; System . out . println ( " 输入的数据为: " + str2 ) ; } 以Enter为结束符,也就是说 nextLine(

Java菜鸟学习笔记--面向对象篇(一):类的定义

我的未来我决定 提交于 2019-12-08 04:34:15
什么是类,对象? 类( class )是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。 类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。类是与某个层 [1] 的对象的最具体的类型。类还可以有运行时表示形式( 元对象),它为操作与类相关的元数据提供了运行时支持。 支持类的编程语言在支持与类相关的各种特性方面都多多少少有一些微妙的差异。大多数都支持不同形式的类继承。许多语言还支持提供封装性的特性,比如访问修饰符。类的出现,为面向对象编程的三个最重要的特性(封装性,继承性,多态性),提供了实现的手段。 类中的成分 成员变量 构造器 方法 代码块 内部类/枚举/接口 类的定义 [访问修饰符] class 类名 { 零到多个构造器定义 零到多个Field定义 零到多个方法 } 1.什么是构造器? 1.使用构造器目的是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Person p1 = new Person(); 2.构造器可以用来在初始化对象时初始化 数据成员 ,一个类可以有多个构造器。一个类的构造器的名称必须与该类的名称一致。要退出构 造,可以使用返回语句

Java学习笔记 - 基础篇

本小妞迷上赌 提交于 2019-12-08 04:32:16
一、面向对象的编程概念 观察现实对象两个性质:状态、行为。 面向对象的好处:模块化、隐藏信息。 继承:子类从父类(超类)继承状态和行为;子类可以改变父类的状态和行为。 接口:是无关对象用来进行彼此交互的设备;一个对象可以实现多个接口。 二、语言基础 变量 对象将它的状态存储在变量中;变量是一个由标识符命名的数据项。 声明变量的形式:<类型> <名称> JAVA 语言两大数据类型 原始类型数据(基本数据类型)、引用类型。 原始类型数据是不能再分解的数据类型(8种:byte、short、int、long、float、double、char、boolean),数据在作为函数参数是以“传值”方式工作的; 整数 byte:1字节长的整数;8位有符号的二进制补码整数 short:短整数;16位有符号的二进制补码整数 int:整数;32位有符号的二进制补码整数 long:长整数;64位有符号的二进制补码整数 实数 flat:单精度浮点数;32位IEEE 754浮点数 double:双精度浮点数;64位IEEE 754浮点数 其他类型 char:单一Unicode字符;16位Unicode字符 boolean:布尔值(true或false);8位/1位(8位空间,1位数据) 引用类型包括类(class)、接口(interface)、数组(array)。引用类型有时也称复合类型

Vue2.0全局API

折月煮酒 提交于 2019-12-07 05:16:53
1.0 Vue.directive 定义在全局的自定义指令,可以自己设置指令名称,指令逻辑,完成某种新功能 例如 <p v-colorful="colorName">我是自定义颜色指令<p> <script> Vue.directive('colorful',function(el,binding){ el.style = 'color:'+ binding.value }) </script> 这里的directive里的第一个参数是自定义指令的名称,第二个是一个函数,函数里面有三个参数,第一个是el代表的是自定义指令对应的标签dom元素,第二个参数bingding则是一个对象,console.log(binding)的话,有很多属性,例如: binding.name-----该例子的colorful,bingding.value----colorName在Vue实例对象里面实际的值,bingding.expression----colorful的名字,第三个参数vnode:是Vue编译的虚拟节点 自定义指令里面也有 钩子函数 ,即生命周期,一共五个, 1.bind 只调用一次,指令第一个绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始动作2.inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。 3.update

java泛型(笔记)

我怕爱的太早我们不能终老 提交于 2019-12-07 05:06:46
一、泛型 JDK1.5 增加泛型支持在很大程度上都是为了让 集合 能够记住其元素的数据类型。在没有泛型之前,一旦把一个对象丢进java集合中,集合就会忘记对象的类型,把所有的对象当成Object类型处理。这样取出来使用时,往往需要强制转换,效率降低。 1.1 概念 所谓 泛型 ,就是允许在定义 类、接口、方法 时使用类型形参,这个类型形参在声明变量、创建对象、调用方法时动态地指定。 从java5开始,java引入了 参数化类型(parameterized type) ,运行程序在创建集合时指定集合元素的类型。 java的参数化类型也被称为泛型 。 1.1 使用泛型的好处: 安全: 在编译的时候检查类型安全。 省心: 所有的强制转换都是自动和隐式的,提高代码的重用率。 1.2 泛型的基本用法 使用泛型,可以在编译时进行类型转换检查,而不使用泛型,在运行时才检查 使用泛型,集合自动记住所有集合元素的 数据类型 ,从而无须对集合元素进行强制类型转换。 1.2泛型字母 1.3 java7泛型的菱形语法 在java7以前,泛型的格式: List<String> strList = new ArrayList<String>(); 在java7开始,可以使用下面的方式: List<String> strList = new ArrayList<>(); java可以推断尖括号里应该是什么类型

Java面向对象之构造器

你说的曾经没有我的故事 提交于 2019-12-06 21:01:32
目录 Java面向对象之构造器 利用构造器确保初始化 构造器重载 Java面向对象之构造器 利用构造器确保初始化 初始化问题是关系编程方式是否安全的一个重要的问题。 功能 :在创建对象时执行初始化。 在Java中,每个类至少有一个构造器 。格式如下: [修饰符] 构造器名(参数列表){ ...执行体 } 这时,突然迷惑,之前写过的代码里都没有构造器的说法呀,是怎么回事呢? 先看下面的语句: Student s0 = new Student(); 这是我们之前经常写的,我们管他叫做创建对象,并让引用变量指向这个对象的过程(类的实例化)。 在执行 new Student(); 语句时,系统就会为对象分配内存空间,并调用相应的构造器,执行响应的执行体,确保对象在被我们操作之前,就已经正确初始化。 可是构造器在我们之前的代码中,还是没有出现构造器的影子啊。这是因为,我们在设计类时, 如果没有定义任何的构造器的话, 系统默认为类提供默认构造器(即无参构造器),执行体为空。 注意 : 对象在构造器执行体之前就已经被建立,只不过这个对象只能在内部被 this (关于this的用法之后会有专门的篇幅总结)引用。 只有在构造器执行体结束之后才作为返回值被返回。 new表达式确实返回了新建对象的引用,但构造器本身是没有返回值的。 关于构造器的访问修饰符 : 如果允许系统中任何位置的类来创建该类的对象