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