当前位置: 首页 > article >正文

Java之类和对象

一.类

1.类的定义

是指对一个对象的特征进行描述。

2.类的形式

在java中定义一个类,需要用到class关键字,首先需要一个类名,类里面含有成员方法和成员变量。

这里简单写一个有关时间的类
class Date{
  public int year;
  public int month;
  public int day;

  public void print(int year,int month,int day){
     System.out.print(this.year+"年"+this.month+"月"+this.day+"日");
}
类名为Date
类里面有成员变量year,month,day.成员方法print.

3.类的实例化

什么是类的实例化:用户自己定义了一个类,就相当于定义了一个新的类型和java自带的int,double类型是一样可以用来定义变量的,这个定义变量的过程就叫做类的实例化,在java中常用new关键字,配合类名来实例化对象。

import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        Date date=new Date();
        date.setDate(2025,2,4);
        date.print();
    }
}

class Date {
    int year;
    int month;
    int day;
    public void setDate(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public void print(){
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }
}

如上图码:用Date类实例化了一个对象date。

用new关键字来创建一个对象。

用.来访问对象里面的成员。

同一个类可以创建多个实例。

4.this引用

上面的代码,我们可以看到有一个陌生的身影——this.

this引用指向当前对象(成员在运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

this引用的特性:

(1):this的类型是对象类类型的引用,即那个对象调用就是哪个对象的引用类型。

(2):this只能在成员方法中使用。

(3):在成员方法中,this只能引用当前对象,不能引用其他对象。

(4):this是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责接收。

5.构造方法

构造方法的作用:对对象中的成员进行初始化并不负责给对象开辟空间。

构造方法的特性

(1):构造方法的名字必须与类名相同。

(2):构造方法没有返回值类型,设置为void也不行。

(3):创建对象(new一个对象)时由编译器自动调用,并且在对象的生命周期内只调用一次。

(4):构造方法可以重载(名字相同,参数列表不同)。

(5):如果用户没有显示定义,编译器会自动生成一份默认的构造方法,生成的默认的构造方法是无参的,一旦用户定义,编译器则不再生成。

(6):构造方法中,可以通过this调用其他构造方法来简化代码。this语句必须为代码块的第一条语句。

public Date(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public Date(){
        this(2025,2,4);
    }
构造方法Date中的this调用的就是含有三个参数的构造方法,简化了其代码。

注意:调用其他构造方法是不能成环,解释如下:

public Date(int year,int month,int day){
        this();
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public Date(){
        this(2025,2,4);
    }

6.初始化

局部变量需要先初始化才能使用,否则会报错,为什么成员变量不需要呢?

这里我们就需要来讨论一下new关键字了。

Date date=new Date;

在JVM层面,运行该语句后会

(1):检测对象对应的类是否加载了,如果没有加载则加载。

(2):为对象分配内存空间。

(3):处理并发安全问题 比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突。

(4):初始化所分配的空间,对象空间申请好了之后,对象中包含的成员已经设置好了初值。具体的类型的初值如下:

(5):调用构造方法,给成员变量赋值。

二.封装

1.封装的概念

将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

2.访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

3.包

包的概念:将多个类收集称为一组,记为包。

在同一个工程中,允许存在相同名称的类,只要在不同的包中即可。

java中已经提供了很多的类供我们使用,例如Date类,可以使用java.util.Date导入java.util包中的Date类。

以下是两种使用包中的类的调用方法:

import java.util.Date;
public class Test1 {
    public static void main(String[] args) {
        Date date=new Date();
        java.util.Date date1=new java.util.Date();
    }
}

在编译器中我们也可以自定义包:

三.代码块

1.静态代码块

static{
            一般用于初始化静态成员变量,定义在类里面,方法外面。
        }

2.非静态代码块(实例代码块或构造代码块)

{
  定义在类里面,方法外面,可以用来初始化成员变量。
}

3.普通代码块

import java.util.Date;
public class Test1 {
    public static void main(String[] args) {
        Date date=new Date();
        {
            int a=10;
            System.out.println(a);
        }
        int a=100;
        System.out.println(a);
    }
}

运行结果:

10
100

由此可知,普通代码块内定义的变量只在代码块内存在。

代码块运行顺序:静态代码块优先于构造代码块优先于构造方法。


http://www.kler.cn/a/532223.html

相关文章:

  • git进阶--3---git pull和git fetch的区别与联系
  • MSP430 单独使用CCR1不触发的问题解决
  • 力扣 121. 买卖股票的最佳时机
  • 基于Spring Security 6的OAuth2 系列之七 - 授权服务器--自定义数据库客户端信息
  • LabVIEW如何有效地进行数据采集?
  • 分析哲学:从 语言解剖到 思想澄清的哲学探险
  • billd-live 一款开源、免费、技术先进的直播系统
  • ubuntu22.04(GUN)安装蓝牙驱动
  • 仿真设计|基于51单片机的光照、温湿度及PM2.5检测报警系统
  • Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)
  • Go语言中的函数闭包
  • 部署keepalvied+lVS(dr)高可用集群
  • 【Envi遥感图像处理】010:归一化植被指数NDVI计算方法
  • Mono里运行C#脚本40—mono_magic_trampoline函数的参数设置
  • 算法日记10:SC62求和(单调栈)(共享求解)
  • 冷链监控系统
  • 4 前置技术(下):git使用
  • ElasticStack简介及应用
  • 基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
  • arkui-x stack叠层解决焦点变换带来的布局问题
  • 《海丰县蔡氏简介》--汕尾市海陆丰大宗蔡姓源流简介
  • 见证中国力量|暴雨服务器全面支持DeepSeek
  • 交叉验证、精确率、召回率
  • 【阅读笔记】LED显示屏非均匀度校正
  • Vue.js 使用组件库构建 UI
  • 北京怀柔区区划地图矢量cdr格式ai高清大图