Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题。世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识。

关于构造器

在C中,如果要使用变量需要先申请内存。在Java中,如果你需要创建一个对象,也可以直接new出来,JVM会自动帮你管理。

默认的类,会自动有一个无参的构造方法,当然你也可以自己定义有参的构造方法。但是要注意,一旦自己定义了,就不再帮你自动创建无参的构造方法了。

一个类可以有多种构造方法,通过参数类型或者个数的不同,就可以实现。这就是方法的重载。甚至于参数的位置不同,都代表不同的构造方法,但是其实并没有什么意义。

不过,返回值并不能进行方法的重载!因为你编码的时候可能并不都是需要赋值给另一个对象,很有可能直接使用,比如:

class A{ public boolean isTrue(){return true;}}
A a = new A();
boolean result = a.isTrue();
//有时,你可能直接这样使用
a.isTrue()

这样编译器就无法分辨到底使用哪一个了!因此返回值是不能用来方法重载的。

另外,注意:所有的变量的初始化都会在构造器执行前进行!

static的用处

static用来声明静态方法或者静态变量,甚至是静态块。

1.如果修饰的是静态变量,那么无论这个类new了多少次,创建了多少对象,每个对象使用的都是同一个变量的引用,可以看做是类的共享变量。

2.如果修饰的是静态方法,那么你不需要创建对象,就可以直接通过类名来使用。

3.如果是静态块,那么当创建对象或者访问到静态区域的时候,就会执行一次这部分的内容,并且只会执行一次!

其实当我们创建类或者使用类的静态属性时,是这样一个步骤:

  • 1 触发类的访问:可能是第一次构造类,也可能是访问了类的静态方法或者属性
  • 2 加载类.class,执行静态部分
  • 3 在堆上分配空间
  • 4 存储空间清零(这就是为什么属性会有默认值的原因)
  • 5 字段初始化
  • 6 执行构造方法

关于垃圾回收

这个是老生常谈的话题了,但是还总是记不住,这里再次唠叨唠叨:

引用计数

最简单的垃圾回收方式,就是引用计数。每个对象都有一个计数器,每次引用对象,都会打一个标记;当引用null时,就会减一。这样,计数为0时,就进行垃圾回收。

缺点就是如果出现循环引用,就没办法进行清除了。

标记-清除

标记清楚,是对所有的对象进行遍历。当出现那些没有引用的对象,就进行标记。最后统一的把所有标记的对象,清除掉。

缺点,会出现大量的碎片化空间。

停止-复制

停止复制的原理,就是进行垃圾回收时,会停止应用程序的运行。把存货的对象拷贝到另一个区域,然后剩下的全部清除掉。

缺点,就是效率低。需要拷贝全部存活对象,还要维护两份区域。

目前使用的垃圾回收机制,基本上是上面的整合体。会首先进行标记清楚,然后碎片化太严重,就进行停止复制,整理地址空间。

Java程序员的日常—— 《编程思想》关于类的使用常识的更多相关文章

  1. Java程序员的日常——经验贴(纯干货)

    工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...

  2. Java程序员的日常——《编程思想》一切都是对象

    今天终于看完了第一章,哈哈,万事开头难....刚开始被编程思想的第一章给蒙住了,讲一堆理论,没什么意思.从第二章开始,真正的开始讲解Java相关的内容,有了一定的开发经验后,再次阅读起来,感觉收获良多 ...

  3. Java程序员的日常 —— 工作一天的收获

    看题目可能是扯皮,其实还是有很多专业知识的.从最开始没有注意到设计原则,到后面的jquery实战技巧,都是今天一天碰到的问题. 每天整理一点点,每天收获一点点. 关于软件设计 在设计系统结构的时候,一 ...

  4. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  5. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

  6. Java程序员的日常 —— 多进程开发

    最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理. 这里简单的介绍下: 如何在Java中执行命令 在windows下肯定是dos命令了,而在linux则为shell命令.执行的方 ...

  7. 【Python】Java程序员学习Python(十)— 类、包和模块

    我觉得学习到现在应该得掌握Python的OOP编程了,但是现在还没有应用到,先留一个坑. 一.类和对象 说到类和对象其实就是在说面向对象编程,学完Java以后我觉得面向对象编程还是很不错的,首先封装了 ...

  8. Java程序员的日常 —— 《编程思想》持有对象

    集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...

  9. Java程序员的日常 —— 《编程思想》包和访问权限

    包的作用 在C++中有命名空间的概念,这是因为,不同的项目或者人写出来的代码,可能名称是一样的.比如,java.util中有List,java.awt中也有List,那么我们在开发中,怎么会知道使用的 ...

随机推荐

  1. css属性word-spacing和letter-spacing的区别

    word-spacing和letter-spacing用来定义单词或者字母之间的水平空白间隔.顾名思义,word-spacing定义了单词之间的空白,例如: <div style="w ...

  2. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  3. swift 如何获取webView的内容高度

    应用中如果使用webView,要想获取其内容高度,就要实现其代理方法, 首先添加代理UIWebViewDelegate 然后给代理赋值 webView.delegate = self 实现代理方法: ...

  4. bootstrap的日期插件datetimepicker有问题

    bootstrap的日期插件datetimepicker在chrome中会出现掉下来的现象,而且一直没找到原因,下载最新版的插件直接在各个浏览器中都会掉下来, 问题一直解决不了,转而换其他插件 htt ...

  5. SQL获取所有数据库名、表名、储存过程以及参数列表

    SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...

  6. 线程学习笔记(EventWaitHandler)AutoResetEvent的使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. mybatis 关联查询 association

    <resultMap id="DutyPersonAndFileAndScoreMap" type="com.cares.asis.duty.entity.Duty ...

  8. 复利test

    因为上节课老师有给我们讲了单元测试的概念及其基本操作,我就对我之前的复利计算器进行了改进和测试.因为从控制台的简单输入输出对单元测试来说不够完善,便参考了其他同学的优秀编程又重新写了一个复利计算器的框 ...

  9. 1029. Median (25)

    分析: 考察归并排序,用简单的快排会超时. #include <iostream> #include <stdio.h> #include <algorithm> ...

  10. 二维码识别 android app

    TextView类用于展示文本信息 ImageView展示 id:button1(用来显示“扫描二维码”) 布局:fill_parent使布满屏幕(高级版本用match_parent) wrap_co ...