首页 > 编程语言 >《Head First Java》学习笔记2--接口、构造函数与垃圾收集器

《Head First Java》学习笔记2--接口、构造函数与垃圾收集器

时间:2023-09-06 11:36:24浏览次数:38  
标签:Head 调用 收集器 super 局部变量 接口 方法 构造函数


接口:


Java的接口就像是100%的纯抽象类


接口的方法都带有public和abstract意义,这两个修饰符是属于选择性的


完全不同的继承树的类可以实现相同的接口,使用接口就像是说“不管来自哪里,只要实现这个接口,别人就会知道你一定会履行这个合约”


当用接口来作为多态类型运用时,对象就可以来自任何地方了,唯一的条件就是该对象必须是来自有实现此接口的类。


允许不同继承树的类实现共同的接口对Java API是非常重要的


1 如果新的类无法对其他的类通过IS-A测试时,就设计不继承其他类的类


2 只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类


3 当你需要定义一群子类的模板,又不想让程序员初始化此模板时,设计出抽象的类给他们用


4 如果想要定义出类可以扮演的角色,使用接口




chap 9 构造器与垃圾收集器


Java中 堆heap --对象的生存空间,可垃圾回收。stack--方法调用及局部变量的生存空间


局部变量:局部变量和方法的参数都是被声明在方法中,它们是暂时的,且生命周期只限于方法被放在


栈上的这段期间,也就是方法调用至执行完毕这段时间为止。


实例变量:实例变量是被声明在类而不是方法里。它们代表每个独立对象的”字段“,实例变量存在于所属对象的堆空间25中


实例变量的默认值:primitive原始类型的默认值是0/0.0/false,引用的默认值是null。


java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区段来执行java程序。



当调用一个方法时,该方法会放在调用栈的栈顶。实际被堆上栈的是堆栈块,它带有


方法的状态,包括执行到哪一行程序以及所有的局部变量的值。所有局部变量都存在于栈上相对应的堆栈块中。


栈顶上的方法是目前正在执行的方法,方法会一直待在这里直到执行完毕


构造函数的一项关键特征就是它会在对象能够被赋值给引用之前就执行。


构造函数不会被继承


java可以有与类同名的方法而不会变成构造函数,其中的差别在于有没有返回类型


编译器只在完全没有设定构造函数时才会调用,如果已经写了一个有参数的构造函数,并且需要一个没有参数的构造函数,则必须自己手动写



在创建对象时,所有继承下来的构造函数都会执行,调用父类构造函数的唯一方法是调用super(),如果没有手动调用,编译器会自动加入。因此如果自己写的构造函数没有调用super,编译器会帮你对每个重载版本的构造函数加上super(),但编译器加的一定是没有参数的版本,假使父类有多个重载版本,也只有无参数的这个版本会被调用到。


对super的调用必须是构造函数的第一个语句


抽象类也有构造函数。抽象类的构造函数会在具体子类创建出实例时执行



从某个构造函数调用重载版的另一个构造函数:需要用this,this就是对对象本身的引用


this()只能用在构造函数中,且它必须是第一行语句,所以每个构造函数可以选择调用super()或this(),但不能同时调用




标签:Head,调用,收集器,super,局部变量,接口,方法,构造函数
From: https://blog.51cto.com/u_16248677/7384664

相关文章

  • 《Head First Java》学习笔记1--抽象类
    最近在看《HeadFirstJava》,HeadFirst系列就是奔着通俗易懂去的,作为对java掌握还不深,先把这本书看透,打一个好的基础抽象类除了被继承之外,是没有用途、没有值,没有目的的抽象类可以有static成员抽象的类代表此类必须要被extend过,抽象的方法代表此方法一定要被覆盖......
  • C++中虚继承时的构造函数
    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。下面我们以菱形继承为例来......
  • 关于前后端交互,取header的尴尬
    背景:最近在写一个接口的时候,需求是这样的,上传excel,匹配项目有多少个字段匹配上了,如果匹配上了在单元格上标注绿色背景,然后返回excel文件和匹配的详细。首先这个excel文件,后端是不会去保存的,所以无法直接返回文件链接,然后需要返回一个json,告诉前端有多少行是匹配上了的,中匹配多少......
  • Windows隐藏nginx的版本,去掉header中的server后面的内容
    一、隐藏nginx的版本,只需要修改nginx的配置文件,重启nginx即可打开nginx所在文件下的conf文件夹下的nginx.conf修改server节点下的 server_tokens改为server_tokensoff;如果没有,添加即可; 二、去掉header中的server后面的内容想将上面截图中的server里面的ngxin也去掉,需......
  • C++的基类和派生类构造函数
    基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。在设计派生类时,对继承过来的成员变量......
  • Install elasticsearch-head: – for Elasticsearch 5.x
    RunningasapluginofElasticsearchInstallelasticsearch-head:–forElasticsearch5.x:sitepluginsarenotsupported.Runelasticsearch-head asastandaloneserverRunningwithbuiltinserverenable cors byadding http.cors.enabled:true inelasticsearc......
  • 合成构造函数
    如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。通常我们认为如果一个class没有构造函数,编译器就会为我们合成一个,其实这种观点是不正确的。比如像下面这样的class:classPerson{intage;char*name;};......
  • 实用指令_文件目录类_echo_head_tail
    文件目录类echo指令输出内容到控制台基本语法echo[选项]{输出内容}应用实例###eg1:使用echo指令输出环境变量echo$PATH###eg2:使用echo指令输出hellowordechohellowordhead指令用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容基本语......
  • Debian / Ubuntu linux install kernel headers package
    确保你有最新的apt版本$ sudoapt-getupdate查找最新的内核版本(可选)$ apt-cachesearchlinux-headers-$(uname-r)安装Linux内核包$ sudoapt-getinstalllinux-headers-$(uname-r)......
  • 构造函数
    一、inline(内联)函数 什么情况下产生inline:函数在class的本体里面定义,就形成一种inline。在外头定义就不是inline。但是,是不是最后真的变成inlinefunction由编译器决定。inline有什么好处:快。有特点而没有缺点。尽量都写成inline那最好。2-2不在本体内定义,可以在......