文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java初始化与清除的方法是什么

2023-06-03 07:10

关注

本篇内容介绍了“Java初始化与清除的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

对象的创建与初始化是同一个概念,不能分离
2、构造函数名必须与类名完全相同,某种意义上讲,构造函数可以看成静态方法,它对于同一个类的每个对象都是一样的,且执行它的时候对象还未创建好
3、默认构造函数(default constructor)是无参数的,编译器将无参构造函数(可能是自己定义的)视为默认构造函数

[@more@]

构造函数可以有参数,一定没有返回值(与void型方法不是同样概念,void是编写者自行确定不返回任何值)
5、可以重载(overloading)构造函数
6、重载规则(适用于全部重载):每一个经过重载的方法都必须有唯一的参数类型的列表
7、new一个对象的时候,new表达式返回这个新创建对象的引用(reference)


8、创建对象是给一段内存空间起名字,方法是一个动作的名字,这都属于名字管理的范畴

实参,调用方法时赋予的参数;形参,方法定义时所声明的参数

this关键字只能用于非static方法内部,注意是方法内部,不是类定义内部,this是对象引用的标识符,它指的是一个对象,用在类定义范围内是没有意义的,常被用于return语句以返回当前对象的reference

可以用this在一个构造函数中调用另一个构造函数,但只能调一个,稍微想想就明白了,一个对象不能被初始化两次,那构造函数显然也不能顺序执行两次

在非构造函数的方法中,不能调用任何构造函数


13、Java的垃圾回收机制只能回收用new分配的内存


14、finalize()方法,垃圾回收机制在释放对象索占用的内存的时候,会先调用finalize()方法,进行一下“临终关怀”,比如在此方法中释放非new分配的内存


15、C++中,对象总是会调用析构函数(destructor)来清理自身,但Java对象不总是会被回收,垃圾回收也不是析构(destruction)


16、垃圾回收器会不会启动,什么时候启动,都是无法确定的事,所以finalize()什么时候执行也无法确定,它们是靠不住的

System.gc()可以强制进行垃圾回收,也就是强制执行finalize()

finalize()还可以被用来检查对象的中止条件(termination condition),比如对象是一个打开的文件,则可以用finalize()检查它是否已经被关闭


19、finalize()是在非常特殊的场合才会用到的,比如:内存是以创建对象以外的形式被分配给对象的,即Java程序调用非Java程序,以native method来分配的内存,比如调用C或C++的malloc(),如果不在finalize()里调用free(),内存就不会被释放,会发生泄漏


20、C++对象如果以本地(local)形式创建(不用new),是创建在栈里的(delete对象时会调用析构函数来释放);Java不允许创建本地对象(local objects),必须用new,分配在堆里(堆比栈慢)

垃圾回收不仅仅是回收空间,还将对象重新排列紧凑,使得堆指针指向大块的未使用空间,提高分配新内存的速度

不同JVM对垃圾回收可能有不同实现机制,常见的有:停止——复制(stop-and-copy)、标记——清扫(mark-and-sweep)、以及在两种之间进行“自适应”

为某个类创建第一个对象时,装载器才装载该类,一般如此

装载一般采用lazy evaluation(惰性编译),编译器只在必要的时候才编译代码,这是现在JDK中Java HotSpot技术采用的方法,代码执行的次数越多,速度就越快

方法内定义的变量如果使用前未初始化,将会有编译时错误,类的成员变量或对象的引用如果未初始化,Java会给予默认初值,其中引用的默认初值为null,此时如果要使用这个引用,将会出现运行时错误,即NullPointException

编译器对类成员变量的赋初值是在构造函数之前执行的,无论成员变量在类定义体的什么位置,在类内部,变量定义的顺序决定了初始化的顺序

某类的第一个对象创建时的完整顺序是:
->分配空间
->存储空间清零(使用java默认值来初始化全部成员变量,对象中的所有基本类型数据被设置成默认值,引用设置成null)
->初始化静态成员变量(使用自定义的默认值)
->初始化非静态成员变量(使用自定义的默认值)
->执行构造函数

静态成员变量只有在第一次被访问或该类的第一个对象被创建时才被初始化,即,只在必要时刻(类被初次加载时)才被初始化,初始化后就不能更改了

可将对静态/非静态成员变量初始化的语句分别用{}围起来组成一个块(或叫做子句)

建议采用int[] a1;的形式来定义数组,但int a1[];也是合法的,java不允许指定数组大小

数组是对象序列,也可以看作是一种特殊对象,即使里面的元素是基本类型,数组也是对象,可以用int[] a = new int[20]来分配存储空间,也可以直接用a1 = a2;来赋值,注意用=赋值的时候只复制了引用

如果数组里的元素不是基本类型,则必须对每一个都new一次,才算每个元素都真正有了空间,否则还只是个引用数组

如果数组越界,编译不会有问题,但会产生运行时错误,即Exception

“Java初始化与清除的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯