欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《JAVA300集》基础知识

程序员文章站 2022-06-15 13:53:11
JAVA面向过程基础(1)Java虚拟机(JVM)实际上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。Java虚拟机是Java能够实现跨平台编译的重要原因。Java虚拟机的内存分为三个区域:栈stack、堆heap、方法区method area。栈的特点- 1.栈描述的是方法执行的内存模型。2.每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。3.栈的存储特性是“先进后出,后进先出”。...

目录

JAVA面向对象基础

(1)Java虚拟机(JVM)

(2)Java的垃圾回收机制

(3)分代垃圾回收机制

(4)开发中容易造成内存泄露的操作

(5)this关键字

(6)static关键字

(7)包机制(package)

(8)导入类import

 


JAVA面向对象基础

(1)Java虚拟机(JVM)

实际上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。Java虚拟机是Java能够实现跨平台编译的重要原因。

Java虚拟机的内存分为三个区域:栈stack、堆heap、方法区method area。

栈的特点- 1.栈描述的是方法执行的内存模型。2.每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。3.栈的存储特性是“先进后出,后进先出”。 4.栈属于线程私有,不能实现线程间的共享。

堆的特点- 1.堆用于存储创建好的对象和数组(数组也是对象)。  2.堆是一个不连续的内存空间,分配灵活,速度慢。 3.  JVM只有一个堆,被所有线程共享。

方法区的特点- 1.JVM只有一个方法区,被所有线程共享。 2.方法区实际也是堆,只是用于存储类、常量相关的信息(用来存放程序中不变或唯一的内容)。 

《JAVA300集》基础知识

(2)Java的垃圾回收机制

内存管理:1.对象空间的分配:使用new关键字创建对象即可;  2.对象空间的释放:将对象赋值null即可。垃圾回收器将负责回收所有”不可达”对象的内存空间。

垃圾回收算法要点:1.发现无用的对象  2.回收无用对象占用的内存空间。

常用算法:引用可达法(根搜索算法)。

(3)分代垃圾回收机制

不同的对象的生命周期是不一样的,因此,不同生命周期的对象可以采取不同的回收算法。

对象被分为三种状态:年轻代、年老代、持久代。

年轻代:所有新生成的对象,都存放在堆内存中的Eden区。

年老代:超过15次(默认值)垃圾回收后仍然存活的对象,存放在堆内存中的Tenured/Old区。

(年轻代和年老代之间的过渡期,存放在堆内存中的survivor区)。

持久代:用于存放静态文件,如Java类、方法等。

《JAVA300集》基础知识

垃圾回收机制(Garbage Collection)可以简称为GC。

Minor GC: 用于清理年轻代区域。当Eden区满就会触发一次Minor GC,清理无用对象,将有用对象复制到Survivor1或Survivor2区。(Survivor1和Survivor2大小空间相同,但是同一时刻只有一个在用,一个为空。)

Major GC:用于清理年老代区域。

Full GC:用于清理年轻代、年老代区域,成本较高。(当Tenured/Old区满了,则会触发一个一次完整地垃圾回收(FullGC))

(补充:为什么有两个survivor区?刚刚新建的对象在Eden区中,经历一次Minor GC,Eden区中的存活对象就会被移动到第一块survivor space S1,Eden区被清空;等Eden区再满了,就再触发一次Minor GC,Eden区和S1中的存活对象又会被复制送入第二块survivor space S2(这样保证了S2中来自S1和Eden两部分的存活对象占用连续的内存空间,避免了碎片化的发生),然后S1和Eden被清空,然后下一轮S1与S2交换角色。)

(4)开发中容易造成内存泄露的操作

1. 创建大量无用对象。

2. 静态集合类的使用。

3. 各种连接对象未关闭。

4. 监听器没有删除。

(5)this关键字

this的用法:(1)消除二义性,this来指明当前对象。  (2)重载构造方法,但不能用于static方法。

public  class Test1{
    int a,b,c;

    Test1(int a, int b){
        this.a = a;  // 错误写法 a = a
        this.b = b;
    }

    Test1(int a, int b, int c){
        this(a,b);  // 必须第一句,调用上一个Test1构造方法
        this.c = c;
    }

    public static void main(String[] args){
        Test1 number = new Test1(2,3);
        Test1 number2 = new Test1(2,3,4);
        System.out.println(number.a);
        System.out.println(number2.a);
    }

}

(6)static关键字

在类中,用static声明的成员变量为静态成员变量,也称为类变量,生命周期和类一样长。而普通变量和方法是属于对象的。

 特点:(1)对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享。 (2)在static方法中不可直接访问非static的成员。  (3)一般用“类名.类属性/方法”来调用。

静态初始化块-用于类的初始化操作,注意在静态初始化块中不能直接访问非static成员。

public class User {
    int id;      
    String name;   

    static String company; //公司名称
    static {
        System.out.println("执行类的初始化工作");
        company = "北京尚学堂";
        printCompany();
    }  
    public static void printCompany(){
        System.out.println(company);
    }  

    public static void main(String[] args) {
        User  u1 = new User();
    }
}

(7)包机制(package)

包是Java中用来管理大量同名的类。

包的两个要点:(1)通常是类的第一句非注释性语句。 (2)包名:域名倒着写,再加模块名。

package com.jd.test;
public class Test {
    public static void main(String[] args) {
        System.out.println("京东的域名");
    }
}
//注: com.jd.test和com.jd没有任何关系

《JAVA300集》基础知识

(8)导入类import

1. Java会默认导入java.lang包下所有的类。

2.如果导入两个同名的类,只能用包名+类名来显示调用相关类

import com.jd.test.Test  // 导入com.jd.test包里的Test类
import com.jd.test.*     // 导入com.jd.test包里所有的类

3. 静态导入(static import)的作用是用于导入指定类的静态属性,这样可以直接使用静态属性。

本文地址:https://blog.csdn.net/Amigo_1997/article/details/110501023

相关标签: JAVA学习 java