Java的编程逻辑(Java基础)(SE传)【二】(函数容器 自定义数据类型 构造法 类和对象的生命周期)

本文详细介绍了Java中的类,将其视为自定义数据类型的容器,包含函数(方法)和属性。类变量和实例变量是成员变量,类方法和实例方法是成员方法。初始化代码块用于设置默认值,构造方法用于初始化对象,有默认构造和私有构造两种。类加载和对象生命周期涉及内存分配、静态变量加载和垃圾回收。文章强调了封装和隐藏实现细节的重要性,以提高程序的抽象层次和安全性。
摘要由CSDN通过智能技术生成

Java的编程逻辑(Java基础)(SE传)


一. 类

1.类的基本概念:

类不仅仅只是函数的容器,也更多的代表着自定义数据类型。

1.1 函数的容器

JavaAPI中有一个Math类,在这个类中有一些数学的函数,使用这些函数可以使用Math.XXX的方式来调用。
这些函数都有相同的修饰符public static,static代表着类的方法,也叫做静态方法
与类方法相对的是实例方法。实例方法没有static修饰符修饰,前面必须通过实例或者对象调用,而类方法可以直接通过类名进行调用,不需要创造实例。public代表着这些函数是公开的,可以在被外部调用。
在这里插入图片描述
Math类的常用函数
在这里插入图片描述
public与private相对比,private表示私有的,这个函数只能在同一个类中被别的函数调用,不可以被外部的类调用。
将函数声明为private可以避免该函数被外部类误用,操作者可以区分哪些是能调用的,哪些是不能的,

通过private的封装和隐藏内部实现细节,避免被误操作,这是计算机程序的一种基本思维方式。

Arrays 类的一些常用函数
在这里插入图片描述
这里将类看作函数的容器,从概念上来看Arrays和Math也可以看作自定义数据类型,其中public static 函数可以看作类型可操作函数。

1.2 自定数据类型

我们将看作自定义数据类型,所谓自定义数据类型就是除开8种基本数据类型以外的其他类型,用于表示和处理基本类型以外的数据。
一个数据类型包括属性以及该类型可以进行的操作组成,属性又可以分为类型本身具有的属性,还是一个具体实例具有的属性,
同样,操作也可以分为是类型本身可以进行的操作,还是一个具体实例可以进行的操作。
有点点绕稍微多读几遍。
类变量和实例变量都叫做成员变量,也就是类的成员,类变量也叫做静态变量或者静态成员
类方法和实例方法都叫做成员方法,也就是类的成员,类方法也叫做静态方法
这样,一个数据类型就主要分为4个部分:
在这里插入图片描述
对于一个类不一定每个部分都有。
类型本身具有的属性通过类变量来体现。
实例变量表示具体的实例所具备的属性,
实例方法表示具体的实例可以进行的操作。
在实例方法种,有一个隐含的参数,这个参数就是当前操作的实例自己,直接操作实例变量,实际也是需要用参数进行。实例方法与类方法更多区别如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2.1 代码块设置默认值

实例都有初始的默认值,如果我们要修改初始的默认值,可以通过在定义变量的同时就进行赋值,或者通过将代码放入到初始代码块中。{ //初始化}
在型建立一个对象时,就会先调用这个初始化,然后才会执行构造方法中的代码。
若语句外面包了一个static{ },这叫做静态初始化代码块。静态初始化代码块在类加载的时候被执行,在任何对象创建的之前都会被也只会被加载一次

1.3 构造法

在初始化对象的时候,有一种方法可以直接对实例变量赋初始值,就是构造方法

public class point {
       //设置两个私有化实例整数类型变量
        private int x;
        private int y;
        
        //无参构造器
        public point(){
                
        }
        //传参构造器
        public point ( int x , int y ){ 
                this.x = x;
                this.y = y;
        }
        //x y分别的get和set方法
        public int getX() {
                return x;
        }

        public int getY() {
                return y;
        }

        public void setX(int x) {
                this.x = x;
        }

        public void setY(int y) {
                this.y = y;
        }
        
}

其中

        //无参构造器
        public point(){
                
        }
        //传参构造器
        public point ( int x , int y ){ 
                this.x = x;
                this.y = y;
        }

就是两个构造方法,构造方法可以有多个,不同于一般方法,构造方法有一些特殊的点:

  1. 名称是固定的,与类的名称相同。
  2. 没有返回值,也不能有返回值。构造方法中隐含的返回值就是实例本身。

与普通方法一样,构造方法也可以重载,第二个构造方法,使用this对实例变量赋值。
使用构造方法point p = new point(3,4);
至少做了几件事:
分配内存。
给实例变量设置默认值。
调用构造方法。

1.3.1 默认构造方法和私有构造方法

其中构造方法这有处细节,构造方法中有默认构造方法,也有私有构造方法。
1.默认构造方法:每个类都至少要一个构造方法,在通过new创建对象的时候被调用。但是构造方法如果无参可以被省略,Java的编译器会自动生产一个默认的构造方法,也就是无参的构造方法。
2.私有构造方法
构造器方法可以是私有的,也就是可以被private修饰的,一下几种场景下会被用到:
(1)不能创造类的实例,类只能通过静态访问,如MathArrays类,它们的构造方法就是私有的。
(2)能创建类的实例,但只能被类的静态方法调用。当类的对象有但只能有一个,即单例,在这张情况下对象时通过静态方法获取的,而静态方法调用的私有构造方法创建一个对象,如果被创建过了,那就会重用这个对象。
(3)只是用来被其他对各构造方法调用的,便于减少代码量。

1.4 类和对象的生命周期

  1. 在程序运行过程中,当第一次通过new 创建了一个对象时,或者之间通过类名访问类变量和类方法时,Java就会将类加载进内存,为这个类分配一个空间,这个空间包括它定义、变量、方法信息,同时还会加载类的静态变量,并对静态变量赋初始值。
  2. 类加载进内存后,一般不会释放,直到程序结束。一般情况下类只会加载一次,所以静态变量在内存中只会有一份,也就是只会加载一次。
  3. 当通过new 创建一个对象时,对象产生在内存中,会存储这个对象的实例变量值,每new一次就会产生一个新的对象,就会有一份独立的实例变量。
  4. 每个对象除了保存实例变量值外,可以理解还保存着对应类型即类的地址,这样通过对象能知道它的类,访问到类的变量和方法代码。
  5. 实例方法可以理解为一个静态方法,只是多了一个参数this。通过对象调用方法,可以理解为就是调用这个静态方法,并将对象作为参数传给this。
  6. 对象的释放是被Java用垃圾回收机制管理的当没有活跃变量指向对象的时候,对应的空间就可能会被释放。(方法区和堆是需要GC回收的区域,而堆是重点回收区域)
    活跃变量就是已加载的类的类变量,以及栈中所以变量。
    在这里插入图片描述

总结

通过对类的实现自定义数据类型,封装该类型的数据所具备的属性和操作,隐藏实现细节,从而在更高的层次(类和对象的层次,而非基本数据类型和函数的层次)上考虑和操作数据。一些上述被提到的关键词:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duacker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值