IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java面向对象详解(4)垃圾回收机制,变量的分类,this static package import -> 正文阅读

[Java知识库]Java面向对象详解(4)垃圾回收机制,变量的分类,this static package import

目录

1:垃圾回收机制

2:this关键字

?3:static 关键字

3:静态初始化块

?4:变量的分类

?5:package,import关键字


1:垃圾回收机制

垃圾回收的原理和算法

1.内存管理,Java内存管理很大程度上是指的就是堆中对象的管理,期中包括对象空间的分配和释放

对象空间的分配:通过new关键字创建对象即可

对象空间的释放:将对象赋值为null即可。垃圾回收器负责回收所有”不可达“(没有变量引用)的对象的内存空间

2:垃圾回收过程

发现无用的对象

回收无用对象所占的内存空间

垃圾回收机制保证可以将“无用的对象”进行回收。无用的对象指的就是没有任何变量 引 用该对象。Java 的垃圾回收器通过相关算法发现无用对象,并进行清除和整理。

3:垃圾回收相关算法

1:引用计数法(引用是变量的别名)

堆中的每个对象都对应着一个引用计数器,当有引用指向它的时候,引用计数器+1,当指向该对象的引用失效的时候(引用变为null),计数器-1,当计数器为零的时候,垃圾回收器会认为该对象是无用对象,会对其进行回收。优点是算法简单,缺点是不能够识别循环引用的无用对象

public class Gc {
    String name;
    Gc time;
    public static void main(String[] args){
        Gc p=new Gc();
        Gc p2=new Gc();
        p.time=p2;
        p2.time=p;
        p=null;
        p2=null;

    }
}

2:引用可达法

比较复杂,这里不说

2:this关键字

this 的本质指的是当前对象的地址,在执行构造方法前对象就已经创建好了,所以在构造方法中,this也可也指当前对象

看下面的代码和运行结果

在第二个重载的构造器中,用this(id,name)调用了第一个构造器中的内容

且必须放在重载构造器的第一行

public class User {
    int id;
    String name;
    String pwd;
    public  User(int id,String name){
        System.out.println("正在初始化已经创建好的对象"+this);
        this.id=id;
        this.name=name;
    }

    public User(int id,String name,String pwd) {
        //一个构造器调用另外一个构造器的时候用this关键字,并且只能放在第一行
        this(id,name);
        this.pwd = pwd;
    }
    void test(){
        System.out.println("id是:"+id+" 名字是:"+name+" 密码是:"+pwd);
    }

    public static  void main(String[] args){
        User u1=new User(101,"卢鑫宇");
        User u2=new User(1010,"卢鑫宇","1234567");
        u1.test();
        u2.test();

    }
}

?this不能用于static 中,static叫做静态方法,或者叫做类方法,用它限定的东西在静态区,而对象在堆区,this指向的对象在堆中,而static域不在堆中,所以无法指向,也就无法在static中使用this

详细看下面这一篇博客

(88条消息) Java 中为什么static方法中不能使用this关键字_Chain的博客-CSDN博客

?3:static 关键字

在类中用static修饰的成员变量为静态成员变量,也称为类变量,类变量的生命周期和类相同 ,它有如下特点:

1.从属于类,它被类的所有对象所共享,在类被载入时显式初始化

2.对于类的所有对象来说,该static成员变量只有一份,被所有的对象所共享

3.一般用类名.类属性/方法来调用

4.在static方法中不能访问非static成员

public class TestStatic {
    int num;
    String name;
    static String company;

    public void login(){
        System.out.println(name+ "要登陆");

    }
    public static void printCompany(){
        //在static方法中,不能访问非static成员
        //login();
        System.out.println(company);
    }
     public TestStatic(){

     }

    public TestStatic(int num,String name) {
        this.num=num;
        this.name = name;

    }

    public static void main(String[] args){
        TestStatic t1=new TestStatic(101,"卢鑫宇");
        t1.login();
        //访问static成员
        TestStatic.company="字节跳动";
        TestStatic.printCompany();
     }
}

?

3:静态初始化块

构造方法用于对象的初始化,静态初始化块用于类的初始化。在静态初始化块中不能访问非static成员

?4:变量的分类

变量分为局部变量,成员变量(实列变量),静态变量(类变量)

局部变量位于方法中或者语句块中,位于栈中,从属于方法或者语句块

成员变量位于堆中,从属于对象

静态变量位于方法区中,从属于类

?

?

public class TestStatic {
    //成员变量
    int num;
    String name;
    //静态变量
    static String company;
    static{
        company="字节跳动";
        printCompany();
    }
    public void login1(/*局部变量*/int num,String name){
        //局部变量
        this.num=num;
        this.name=name;
        System.out.println("id="+num+" name"+name);
    }


    public void login(){
        System.out.println(name+ "要登陆");

    }
    public static void printCompany(){
        //在static方法中,不能访问非static成员
        //login();
        System.out.println(company);
    }
     public TestStatic(){

     }

    public TestStatic(int num,String name) {
        this.num=num;
        this.name = name;

    }

    public static void main(String[] args){
        TestStatic t1=new TestStatic(101,"卢鑫宇");
        t1.login1(11,"古倪啷虚宇");
        t1.login();
        //访问static成员
        TestStatic.company="字节跳动";
        TestStatic.printCompany();
     }
}

?

?5:package,import关键字

package:我们通过package来实现对包的管理,package的使用有两个特点

1:通常是类的第一句非注释语句

2:包名是域名反过来写即可 如com.core ,再加上模块名(模块名是文件名去掉后缀)便于管理内部类

?

?import:导入其他包中的类

如想使用输入的方法,应该导入Scanner这个类

import java .util.Scanner;

如果想导入util包下的所有类可以这样写,import java.util.*;但是编译的速度会慢

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:25:20  更:2021-08-24 15:27:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/19 2:33:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码