构造方法

Java面向对象-4.继承、this、super

ぃ、小莉子 提交于 2019-12-10 14:59:52
extends继承: 提高了代码的复用性 提高了代码的维护性 让类与类产生了关系,是多态的前提 弊端:类的耦合性增强了 开发的原则:高内聚(自己能做的自己做),低耦合 java中类的继承特点: 只支持单继承,不支持多继承(一个儿子只能有一个爹) 支持多层继承(父、子、孙) 如果想用这个体系的所有功能用最底层的类创建对象 如果想看这个体系的共性功能,看最顶层的类 继承注意事项: 子类只能继承父类所有非私有的成员变量和方法 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法 不要为了部分功能而去继承 继承中成员变量的关系: 若父类与子类有相同的成员变量,则子类对象调用时就调用子类的成员变量(就近原则) 若父类与子类有相同的成员变量,则在成员变量前加上super就可以在子类对象调用时就调用父类的成员变量 若父类与子类有相同的成员变量,则在成员变量前加上this就可以在子类对象调用时就调用子类的成员变量 this和super的区别: this可以访问自己的成员变量,若本类没有这个成员变量,也可以访问父类的成员变量 super只能访问父类的成员变量 在每一个类中构造方法里面都会有一个默认的super()方法,子类调用构造方法时都会先调用父类的构造方法 子类中所有构造方法都会默认访问父类的空参的构造方法,若自己给出super(参数);则会访问父类有参的构造方法

JavaSE基础——反射

纵饮孤独 提交于 2019-12-10 14:58:12
  1、反射概述   Java反射机制是在 运行状态下 ,对于任意一个类,都能够知道这个类所有的属性和方法;对于 任意一个对象 ,都能够调用它的任意一个方法和属性;这种动态获取的信息以及 动态调用对象的方法的功能 称为Java的反射机制。   加载完类之后, 在堆内存中的方法区就会产生了一个 Class 类型的对象 (一个类只有一个Class对象) ,这个对象就包含了完整的类的信息结构。我们可以 通过这个对象看到类的结构 。这个对象就像一面镜子,通过镜子可以看到类的结构,所以我们称之为反射。   2、反射的优缺点    优点: 可以实现动态的创建对象和编译,体现出很大的灵活性。    缺点: 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。   3、获取一个类的Class对象的三种方式: /** * 获取一个类的Class对象的三种方式 */ public class Test2 { public static void main ( String [ ] args ) throws ClassNotFoundException { //方式1:通过类的实例对象和Object类的getClass()方法获取 String s = new String ( "hello" ) ; Class

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-10 05:01:53
Java 对象和类 Java作为一种面向对象语言。支持以下基本概念:多态/继承/封装/抽象/类/对象/实例/方法/重载。 对象 : 对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。 类 类是一个模板,它描述一类对象的行为和状态。 一个类可以包含以下类型变量: 局部变量: 在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 成员变量: 成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。 类变量: 类变量也声明在类中,方法体之外,但必须声明为static类型。 构造方法 每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。 下面是一个构造方法示例: public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } } 创建对象 对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象

Java 读书笔记 (二) 对象和类

ぐ巨炮叔叔 提交于 2019-12-10 03:20:38
Java 作为一种面向对象语言,支持以下基本概念: 多态 继承 封闭 抽象 类 对象 实例 方法 重载 对象: 是类的一个实例,有状态和行为。以人为例,黄种人、白种人、黑种人为类,每一个具体的人为类的对象。 类: 它描述一类对象的行为和状态。 软件对象的状态就是属性,行为通过方法体现。 在软件开发中, 方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。 一个类可以包含以下类型变量: 局部变量: 在方法、构造方法或语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量会自动销毁。 成员变量:定义在类中、方法体之外的变量被称为成员变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定烦的语句块访问。 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。 一个类可以有多个方法。如barking()、hungry()、sleeping()都是Dog类的方法。 构造方法 每个类都有构造方法,如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。 1 //构造方法示例: 2 3 public class Puppy{ 4 public Puppy(){ 5 } 6 7 public Puppy

java继承

允我心安 提交于 2019-12-10 00:11:11
子类 1.通过extends关键字,可以直接拥有来自于父类的属性和行为 (但是能不能访问要受访问修饰符的限制) 分清楚,,拥有和能不能直接操作到是两个不同的概念 2 公式: 子类 extends 父类 父亲的属性和行为 子类字自动继承; 但是子类不能继承父类的构造方法; 原因1:构造方法的语法要求是方法名必须和类名保持一致. 如果子类继承了父亲的构造,那么子类就会有一个叫父类的名的构造方法. 这一点与构造语法的语法冲突. 原因2: 构造方法的作用是产生对象的.父类和子类是分开的. 3.虽然父类的构造方法没有被子类继承,但在构造子类对象的过程中, 会先在内存中产生父类对象部分,再叠加子类特有部分,从而构造一个完整的子类对象. 也就是说new一个子类对象时,会先调用父类构造,在调用子类构造 类似于"内存叠加的方式" 4.如果子类定义了和父类一模一样的属性,那么子类对象身上会有两个该属性,一个在父类一个在子类 (1) 不应该这么设计,因为设计父类的时候已经考虑了共有,设计子类应该考虑特有. (2) 用super.属性名 代表的是定义在父类部分的同名属性名 (3) 用this.属性名 代表的是定义在子类部分的同名属性名 5.如果子类定义了和父亲一模一样的方法呢? 这叫做方法的"重写' 它是指所有类都有的共同行为,所以我们要定义在父类中 但是,不同的子类又有不同的实现

java基础知识总结

吃可爱长大的小学妹 提交于 2019-12-09 23:33:59
1.变量类型 基本类型:基本类型的变量“持有”某个数值;引用类型:引用类型的变量“指向”某个对象。 2.基本数据类型 基本数据类型是CPU可以直接进行运算的类型。java中的基本数据类型有: 整数类型:byte short int long 浮点数类型:float double 字符类型:char 布尔类型:boolean 3.== 和 equals ==判断两个变量或者实例是不是指向同一个内存空间,equals判断两个变量或者实例所指向的内存空间的值是否相同 ==是对内存地址进行比较,equals是对内容进行比较 4.break 和continue break跳出当前循环,continue提前结束本次循环,继续执行下次循环。 面向对象 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。 5.类和实例 class是一种对象模板,定义了如何创建实例,instance是对象实例,是根据class创建的实例。 6.参数传递 基本类型的参数传递,是调用方值的复制,双方各自的后续修改,互不影响;引用类型的参数传递,调用方的变量和接收方的变量,指向的是同一个对象,双方任意一方对此对象的修改都会影响到对方。 7.构造方法 构造方法用于初始化实例,如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法;如果定义了一个构造方法,那么

类、方法、成员变量和局部变量的可用修饰符

≯℡__Kan透↙ 提交于 2019-12-09 22:58:00
1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢? 2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。

Eclipse一些基本使用方法

淺唱寂寞╮ 提交于 2019-12-09 22:12:38
一、Eclipse 构造方法自动生成和get_set方法自动生成 自动生成构造方法 1)无参构造方法 在代码区右键——source——Generate Constructors from Superclass… 2)带参构造方法 在代码区右键——source——Generate Constructors using fields… 自动生成get/set方法 在代码区域——source——Generate Getters and Setters… 以上两种方法快捷键操作 无参构造方法:Alt+Shift+S+C 带参构造方法:Alt+Shift+S+O set/get方法:Alt+Shift+S+R 二、Eclipse中Debug调试 Debug作用:调试程序和查看程序执行过程 断点:表示从哪里开始看程序 如何设置断点:在有效程序的左边双击即可 在哪里设置:一般在方法的第一条开始 运行:右键——Debug as——Java Application进入debug视图(F6为向前一步),可以看到每一步的运行过程 来源: CSDN 作者: marksnowmx 链接: https://blog.csdn.net/sinat_35217431/article/details/103464760

Java学习笔记(面向对象上)

无人久伴 提交于 2019-12-09 19:11:05
面向对象(上) 面向对象的特点: 封装性 (是面向对象的核心思想,将对象的属性和行为封装起来)、 继承性 (主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和 多态性 (指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其他类继承后,它们可以具有不同的数据类型或表现出不同的行为,使得同一个属性和方法在不同的类中具有不同的语义。例如听到 cut时,理发师的行为是剪发,演员的行为是停止表演)。 一个类包含多个对象,比如动物类,包含对象有狗、狼、猫等等。 在程序中创建对象,首先需要定义一个类。类中可以定义成员变量(用于描述对象的特征)和成员方法(用于描述对象的行为)。 class Person{ int age = 23; //定义在类中的变量为成员变量 //定义speak()方法 void speak(){ int age = 30; //定义在方法中的变量为局部变量 System.out.println("我今年"+age+"岁!"); /*局部变量可以和成员变量同名,此时方法中通过变量名访问到的是局部变量*/ } } class Person{ int age; void speak(){ System.out.println("我今年"+age+"岁!"); } } public class Test { public