Java笔记——基础概念

作者: cynthia猫 | 来源:发表于2019-04-26 22:12 被阅读5次
  1. Java语言特性
    简单性
    解释性
    面向对象
    高性能
    分布式
    多线程
    健壮性
    动态性
    安全性
    跨平台
    移植性

以上,加粗的是Java里比较重要的几个特性。

  1. 跨平台原理
    跨平台:开发的软件在任何操作系统上都能安装并运行
    Java虚拟机JVM,由JVM来负责Java程序在该系统中的运行。

  2. JRE和JDK的概述
    JRE包括JVM和Java程序所需的核心类库,如果想要运行一个开发好的Java程序,只要安装JRE即可。
    JDK是提供给开发人员使用的,其中包含了Java的开发工具,也包括了JRE。
    java的开发工具有:编译工具javac、打包工具jar等
    JDK = JRE + JAVA的开发工具
    JDK = JVM + 核心类库 + Java开发工具(javac,jar……)

JDK是用于java程序的开发,而JRE是只能运行class而没有编译的功能。

  1. Java程序运行流程
  • 编写.java文件
  • 编译.java文件,获得.class文件
  • 运行.class文件 看到效果
  1. Java中常量的分类
  • 字面值常量
    字符串常量 用双引号括起来的内容
    整数常量 所有整数
    小数常量 所有小数
    字符常量 用单引号括起来的内容,里面只能放单个字符
    布尔常量 true和false
    空常量 null
  • 自定义常量
  1. Java的垃圾回收机制
    Java会自动回收无用对象占用的内存空间,使该空间可被程序再次使用。

变量名(存一个地址,堆里的地址) 栈
对象 堆

无用:栈里面没有一条线指向堆里面了,堆里面的对象没有被引用了,就无用了。

变量名指向一个对象。
变量不要了,这个指向就不存在了,堆里的对象会被系统自动回收。

  1. 一个对象内存图分析
    示例代码:
/**1. 在同一个文件内,不能有2个public的class
 **2. 同一个包内,不能有相同的类
**/
public class Demo{
    public static void main(String[] args){
        Person p = new Person();
        p.name = "Cynthia";
    }
}

class Person{
    String name;

    public void speak(){
        System.out.println("I am" + name);
    }
}

栈区、堆区、方法区

首先main方法进栈
main方法里面有一个p变量,此时需要new一个person,在下面的堆区⬇️,之后把p变量指向这个new出来的对象。
接下来执行speak方法,方法进栈。
栈区:

main方法
p变量
speak方法

在执行main方法的时候,因为main方法属于Demo类,所以要用到这个类,所以要先把Demo类加载到方法区里面。
把这个Demo类的字节码(Demo.class)加载到方法区。这个字节码里面就有main方法,所以main方法也加载了。
main方法接下来用到了Person这个类,所以把Person的字节码加载进来。
此时的方法区:

Demo.class{
main方法
}
Person.class{
name属性
speak方法
}

堆区:

new Person{
name = null 刚new出来的,name属性为空
}

speak执行完,弹出栈。此时main也执行完了,所以main方法出栈。
此时堆的对象什么时候释放,不用管,java在某一个时刻,会自动回收。

  1. 两个对象内存图分析
    示例代码:
public class Demo{
    public static void main(String[] args){
        Person p1 = new Person();
        p1.name = "Cynthia";
        
        Person p2 = new Person();
        p2.name = "myname";
    }
}

class Person{
    String name;

    public void speak(){
        System.out.println("I am" + name);
    }
}

栈区、堆区、方法区

说一下和上面一个对象时,不一样的地方:
main方法里面有一个p1变量,此时需要new一个person,在下面的堆区⬇️,之后把p1变量指向这个new出来的对象。
然后speak方法进栈,执行speak方法,执行完毕弹栈。
再往下执行,又有一个p2变量,同样new出来一个person,在堆区,p2指向对象。
然后又遇到speak方法,进栈、执行、弹栈。
然后main方法执行完了,先弹出p2,再弹出p1,之后弹出main方法。

  1. 匿名对象
    直接new一个对象并使用,并没有把它赋值给一个变量,这样的对象叫做匿名对象。
    使用场景:只需要使用一次该对象的场合。

相关文章

网友评论

    本文标题:Java笔记——基础概念

    本文链接:https://www.haomeiwen.com/subject/fujcnqtx.html