java 学习笔记(2)-运算符

Java运算符

特别注意,java有一个跟python很大的区别。看下面代码。

public class PassObject {
  static void f(Letter y) {
    y.c = 'z';
  }
  public static void main(String[] args) {
    Letter x = new Letter();
    x.c = 'a';
    System.out.println("1: x.c: " + x.c);
    f(x);
    System.out.println("2: x.c: " + x.c);
  }
} ///:~
public class HelloWorld {
    static void chChar(int y){
        y = 100;
    }
    public static void main(String[] args){
        int a = 10;
        System.out.println(a);
        chChar(a);
        System.out.println(a);
    }
}

这两段代码可以看出差异性。

  • 第一段代码表达了这样一个观点: 如果自定义了一个类,然后把它当参数传给一个函数。这个函数不会另外开新的空间,而是直接指向你的对象。

  • 而第二段代码却说: 如果你传的类是系统内部的类,被作为参数传入时,会令开一个空间。

初始化与清理

Java有垃圾回收器负责回收无用对象占据的内存资源。由于垃圾回收器只知道释放经由new分配的内存,所以它不知道如何释放并非使用new获得的特殊内存。

为了应对这种情况,Java允许在类中定义一个名为finalize()的方法,一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。这与C++中的析构函数有所不同,当程序员调用delete操作符时,就会调用相应的析构函数,而Java虚拟机如果并未面临内存耗尽的情形,它不会浪费时间去执行垃圾回收以恢复内存,这意味着finalize()并不保证一定会发生。

之所有要有finalize(),是由于在分配内存时可能采用了类似C语言中的做法,而非Java中的通常做法,这种情况主要发生在使用本地方法的情况下。本地方法是一种在Java中调用非Java代码的方式,目前只支持C和C++,在非Java代码中,也许会调用malloc()函数来分配存储空间,所以需要在finalize()中用本地方法调用free()来释放。

java运行原理

Java解释器的工作程序如下:首先,它找到环境变量CLASSPATH(将Java或者具有Java解释能力的工具——如浏览器——安装到机器中时,通过操作系统进行设定)。CLASSPATH包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH根开始的一个路径名(所以package foo.bar.baz会变成foo\bar\baz或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为CLASSPATH内的各个条目(入口)。以后搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。此外,它也会搜索一些标准目录——这些目录与Java解释器驻留的地方有关。
为进一步理解这个问题,下面以我自己的域名为例,它是bruceeckel.com。将其反转过来后,com.bruceeckel就为我的类创建了独一无二的全局名称(com,edu,org,net等扩展名以前在Java包中都是大写的,但自Java 1.2以来,这种情况已发生了变化。现在整个包名都是小写的)。由于决定创建一个名为util的库,我可以进一步地分割它,所以最后得到的包名如下:
package com.bruceeckel.util;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 89,879评论 17 311
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 1 Verilog中信号展宽的两种写法 第一种写法: 把信号signal_a 展宽8拍 第二种写法: 利用移位寄...
    喜欢萝莉的逗逼青年阅读 6,454评论 0 50
  • 我左手拎着早饭,右手提着暖壶,慢悠悠走在楼梯上,眼看还有三层阶梯就到6楼了,突然脚下绊了一下,伴随着暖壶爆破的声音...
    无恙志阅读 307评论 0 0