当前位置: 首页 > news >正文

java基础系列:(一)初始化与清理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、用构造器确保初始化

        在java中,通过提供构造器,类的设计者可以确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。

        如何命名构造器方法?

(1)所取的任何名字都可能与类的某个成员名称相冲突;

(2)调用构造器是编译器的责任,所以必须让编译器知道应该调用哪个方法。

        考虑在初始化期间要自动调用构造器,构造器采用与类相同的名称。

  1. public class Demo {
  2.     Demo() {
  3.         System.out.println("test");
  4.     }
  5. }

        在创建对象时,new Demo();将会为对象分配存储空间,并调用相应的构造器。这就确保了在你能操作对象之前,它已经被恰当的初始化了。在java中,“初始化”和“创建”捆绑在一起,两者不能分离。

        不接受任何参数的构造器叫做默认构造器,也称无参构造器。

2、重载

(1)区分重载方法的规则很简单,每个重载的方法都必须有一个独一无二的参数类型列表。

(2)不能以返回值区分重载方法。

    例如:

             int demo(int size);

             double demo(int size);

    如果像下面这样调用方法:

            demo(1);

    此时java没法判断该调用哪一个demo(int size)。

3、thist关键字

       如果有同一类型的两个对象,分别是a和b。你可能想知道,如何才能让这两个对象都能调用peel()方法呢?

       如果只有1个peel(int i)方法,它是如何知道是被a还是被b所调用的呢?

      为了能用简便、面向对象的语法来编写代码,编译器做了一些幕后操作。它暗自把“所操作对象的引用”作为第一个参数传递给peel(int i)。所以上述两个方法的调用就变成了这样:

        peel(a, 1);

        peel(b, 2);

       这是内部的表现形式,我们并不能这样写代码,并试图通过编译;但这种写法的确能够帮助你了解实际所发生的事情。

       假设你希望在方法的内部获得对当前对象的引用。由于这个引用是编译器“偷偷“传入的,所以没有标识符可用。但是,为此有个专门的关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this的用法和其他对象的引用并无不同。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。

       this可以用在构造器中调用其他构造器。通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确使用,这样,调用其他构造器就有了直接。尽管可以用this调用一个构造器,但却不能调用两个,此外,必须将构造器调用置于最起始处,否则编译器会报错。

4、static的含义

       了解了thist关键字之后,就能更全面的理解static的含义。static方法就是没有this的方法,在static方法的内部不能调用非静态方法,反过来倒是可以的。static的主要用途是在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。

5、清理:终结处理和垃圾回收

       java有垃圾回收期负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些由new分配的内存,所以它并不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,java允许在类中定义一个名为finalsize()的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalsize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

6、成员初始化

        java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,java以编译时错误的形式来贯彻这种保证。

       类的数据成员都会有一个初始值,基本数据类型初始值如下:

  1.             boolean    false
  2.             char           []
  3.             byte           0
  4.             short          0
  5.             int              0
  6.             long           0
  7.             float           0.0
  8.             double       0.0

       在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。

       无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值;如果它是一个对象引用,那么它的默认初始化值就是null。

        静态初始化只在必要时刻才会进行,只有在第一个对象被创建(或者第一次访问静态数据)的时候,它们才会被初始化。此后,静态对象不会再次被初始。

转载于:https://my.oschina.net/huangyuewu/blog/971151

相关文章:

  • tarjan强联通分量(模板)
  • 4.3.4 空值与聚合函数
  • AC日记——矩阵取数游戏 洛谷 P1005
  • 【Docker镜像】docker默认存放路径
  • iOS多线程---NSOperation的常用操作
  • Spring源码-IOC容器(六)-bean的循环依赖
  • Android 图片缓存处理
  • iOS中 OC字符串 与 C语言字符串 相互转换
  • php+Ajax 例子
  • 英语句型——口语
  • 三重积分计算--切片法
  • 关于梦想
  • 不用軟體解PPT密碼
  • 元组
  • activemq使用
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【347天】每日项目总结系列085(2018.01.18)
  • 4. 路由到控制器 - Laravel从零开始教程
  • Bytom交易说明(账户管理模式)
  • extjs4学习之配置
  • GraphQL学习过程应该是这样的
  • javascript面向对象之创建对象
  • oldjun 检测网站的经验
  • Promise面试题,控制异步流程
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 工程优化暨babel升级小记
  • 基于web的全景—— Pannellum小试
  • 解析 Webpack中import、require、按需加载的执行过程
  • 面试总结JavaScript篇
  • 爬虫模拟登陆 SegmentFault
  • 悄悄地说一个bug
  • 如何利用MongoDB打造TOP榜小程序
  • 入手阿里云新服务器的部署NODE
  • 微信小程序开发问题汇总
  • 协程
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 积累各种好的链接
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​TypeScript都不会用,也敢说会前端?
  • !!java web学习笔记(一到五)
  • #includecmath
  • #pragma 指令
  • #宝哥教你#查看jquery绑定的事件函数
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $refs 、$nextTic、动态组件、name的使用
  • (14)Hive调优——合并小文件
  • (2)STL算法之元素计数
  • (27)4.8 习题课
  • (BFS)hdoj2377-Bus Pass
  • (笔试题)分解质因式
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks