java00——类和对象

news2024/10/6 4:14:29

在Java中一切皆对象

什么是对象?

一个人、一只猫、一条狗…这些就是一个对象;
每个对象都有属性和行为。

什么是类?

类即同类别,例如不论男人、女人、黑人、白人…,都是人类,即同一类事务的统称。

类的组成(类长什么样?)

1、Java程序的基本组成单元是类
2、类中包含属性方法两部分
在这里插入图片描述
实例1:下面定义了一个Human类,
1、有name属性和heart 属性(其中heart 是静态成员变量)、
2、getName()方法和setName(String name)方法、静态方法(类方法) hello()

class Human {
    String name = "二毛";;			//name属性(实例成员变量) 
    static int heart = 1;			//使用static定义静态成员变量heart
    
    String getName() {				//getName()方法
        return name;
    }

    void setName(String name) {		//setName(String name)方法
        this.name = name;
    }
	
	static void hello(){			//静态方法(类方法) hello()
		System.out.println("静态方法(类方法)hello");
	}
	
	Human() {
		System.out.println("构造方法Human");
	}
}

对象的创建和使用(对象长什么样?)

对象的创建

其实对象也是变量,只是对象这个变量的数据类型是一个确切的类
对象的创建叫实例化类的对象

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human = new Human();
    }
}

从上面可以看出,对象的创建格式为:

类名 对象名 = new 类名();

对象的使用(访问实例变量和方法)

通过对象只能访问到实例对象和方法,不能访问静态成员变量

对象访问实例变量和方法的格式:

对象名.实例变量

对象名.方法名(参数)

class Human {
    String name = "二毛";		//name属性(实例成员变量)
    static int heart = 1;		//使用static定义静态成员变量heart
    
    String getName() {			//getName()方法
        System.out.println(name);
        return name;
    }

	/*mian方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        /*对象的创建其实分为两步
			1、声明:声明一个对象,包括对象名称和对象类型。
			2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
		*/
        Human human = new Human();

        System.out.println(human.name);//访问实例变量和方法
        human.getName();//访问方法
    }
}

构造方法

创建对象的补充说明

对象的创建其实分为两步:1、声明,2、实例化+初始化

class Human {
    String name = "二毛";		
    static int heart = 1;		
    
    String getName() {			
        System.out.println(name);
        return name;
    }

	/*mian方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        /*对象的创建其实分为两步
			1、声明:声明一个对象,包括对象名称和对象类型。
			2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
		*/
        Human human = new Human();

        System.out.println(human.name);
        human.getName();
    }
}

什么是构造方法?

上面代码注释中提到了构造方法,下面来说明一下什么是构造方法

1、构造方法,顾名思义还是方法,只是构造方法的名称必须与类名称一样,也就是方法名和类名一样的方法就是构造方法

//示例
class Human {
	Human(){//无参构造

    }
    Human(String name){//有参构造
        System.out.println(name );
    }
}

说明:
1、构造方法的名称必须与类名称一样。
2、一个类可以有多个构造方法。
3、构造方法分为有参构造和无参构造。
4、对象的创建就是通过构造方法完成的。
5、构造方法没有返回值,也不能用void修饰

对于第4点说明,有人就有疑惑了,在上面创建对象的例子中,Human类中根本就没有看到构造方法,怎么又说对象的创建就是通过构造方法完成的呢?

其实,在你定义一个类的时候Java就自动给你添加了一个隐藏的无参构造方法,也就是这样

//示例
class Human {
	Human(){//无参构造

    }
}

只不过这个无参构造没有向我们这样显式的写出来,它是隐藏起来的,也就是这样

//示例
class Human {
	/*Human(){//无参构造

    }*/
}

当我们使用new关键字创建对象的时候就会调用相应的构造方法(无参构造或有参构造)

前面Human human = new Human();使用的是默认的无参构造方法创建对象。你也可以定义有参构造来创建对象

class Human {
    String name = "二毛";

    Human(){//无参构造

    }
    Human(String name){//有参构造
        this.name = name;
        System.out.println(name );
    }

    public static void main(String[] args){
        // 下面的语句使用有参构造创建一个Human对象叫human,并初始化humen对象的name等于“三毛”
        Human human = new Human("三毛");

        System.out.println(human.name);
    }
}

static关键字&静态变量和静态方法

在类中被static修饰的变量将静态变量(类变量),被static修饰的方法叫静态方法

静态变量

class Human {
    String name = "二毛";;			//name属性(实例成员变量)
    static int heart = 1;			//使用static定义静态成员变量heart,也叫类变量
}

实例变量和静态成员变量的区别
一、实例变量
1、只能被对象访问
2、不同对象之间不共享数据值

二、静态成员变量
1、可以被对象访问(格式:对象名.静态变量名),也可以用类名词访问(格式:类名.静态变量名)
2、不同对象之间共享数据值

静态方法

class Human {
    int method1(int num){
		System.out.println("这是一个实例方法");
		return 1+num;
	}
	
	//静态方法
	static int method2(int num){
		System.out.println("这是一个静态方法");
		return 1+num;
	}
}

实例方法与静态方法【类方法】的区别
一、实例变量
1、实例方法只能对象访问,
2、实例方法只在方法调用时分配运行空间,

二、静态方法【类方法】
1、 静态方法【类方法】 可以对象访问,也可以类名访问
2、静态方法【类方法】在方法调用前已经分配好运行空间。
3、静态方法不可以使用this关键字
4、静态方法不可以直接调用非静态方法,都是可以调用其他静态方法

this 关键字

在上面的对象的创建和使用中的setName()方法中,使用了一个关键字this,如下:

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human = new Human();
    }
}

现在说明this代表什么?

this英文意思位“这”,在Java中表示当前调用类中属性或方法的对象,例如上面例子中的this就代表对象human。
实际上this代表当前对象的引用

class Human {
    String name = "二毛";
    static int heart = 1;
    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

	/*main方法*/
    public static void main(String[] args){
        // 下面的语句将创建一个Human对象叫human
        Human human1 = new Human();
		Human human2 = new Human();
		
		human1.setName("小红");//此时this代表的是human1的引用
		human2.setName("小明");//此时this代表的是human2的引用
    }
}

即哪个对象去操作类,这时的this就代表该对象,或者说该对象的引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTB-Sandworm

HTB-Sandworm 立足altas -> silentobserversilentobserver -> 完整的atalsatlas -> rootexploit 扫描最常用的1000个端口。 80会重定向到443。 去看看443有什么吧。 目录扫描可能不会起作用。在concat上面找到了一个有趣的东西。 “如果不知道怎么PGP&#xff1…

Axure教程—折叠面板

本文介绍利用Axure中的动态面板制作折叠面板 一、效果 预览地址:https://3k8az1.axshare.com 二、功能 1、点击标题展开面板内容 2、点击标题折叠面板 三、制作 从默认元件库拖入一个动态面板,设置两个状态,一个状态面板标题,一…

【MySQL】不允许你还不了解创建计算字段

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指…

【开源与项目实战:开源实战】82 | 开源实战三(中):剖析Google Guava中用到的几种设计模式

上一节课,我们通过 Google Guava 这样一个优秀的开源类库,讲解了如何在业务开发中,发现跟业务无关、可以复用的通用功能模块,并将它们从业务代码中抽离出来,设计开发成独立的类库、框架或功能组件。 今天,…

【后端】使用TS编写任务管理系统----Express

文章目录 常见的后端框架安装并且声明文件库项目基本配置编写任务管理后端API添加任务查看任务设置任务完成状态删除任务 总结 node -v v16.13.0https://github.com/dL-hx/server-side 常见的后端框架 expresskoa… 安装并且声明文件库 $ npm i express $ npm i types/exp…

前端vue入门(纯代码)14

内容创作不易,各位帅哥美女,求个小小的赞!!! 【15.给todoList案例添加编辑按钮】 本篇内容在TodoList案例的基础上添加个编辑按钮,要求: (1)点击编辑按钮后&#xff0c…

轻松学会研华屏幕下载和上传

🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 ✅ 如果觉得博主…

HashMap和HashSet的知识点总结

前言 在之前我们介绍过TreeMap和TreeSet: TreeMapTreeSet 知识点梳理总结_Crystal_bit的博客-CSDN博客 也知道Key-Value和Key模型,但是我们可能还对Hash不太了解,这里我们对Hash了解之后再对HashMap和HashSet的基本使用了解一下。 目录 1…

LabVIEW 图像处理功能

设置成像系统并采集图像后,您可以分析和处理图像,以提取有关被检测对象的有价值信息。 内容 图像分析图像处理斑点分析机器视觉 图像分析 影像分析结合了基于影像像素的灰度强度计算统计数据和测量的技术。您可以使用影像分析功能来确定影像质量是否足以…

scratch lenet(10): C语言计算log

scratch lenet(10): C语言计算log 文章目录 scratch lenet(10): C语言计算log1. 目的2. 原理: x m ∗ 2 p x m * 2^p xm∗2p3. 公式展开3.1 公式分解3.2 获取 m m m3.3 获取 p p p3.4 Remez 算法Remez 算法用于 sin(x) 的快速计算Remez 算法用于 exp 的近似Remez 用于自然…

【MySQL数据库】存储过程

目录 一、存储过程1.1概述1.2优点 二、存储过程实战2.1创建存储过程2.2存储过程的参数2.3条件语句 if-then-else end if2.4循环语句while end while 一、存储过程 1.1概述 存储过程是一组为了完成特定功能的SQL语句集合。存储过程在使用过程中是将常用或者复杂的工作预先使…

CSS基础学习--25 border(边框)进阶

一、边框常见属性 border-radiusbox-shadowborder-image 属性说明CSSborder-image设置所有边框图像的速记属性。3border-radius一个用于设置所有四个边框- *-半径属性的速记属性3box-shadow附加一个或多个下拉框的阴影3 二、border-radius 圆角 在 CSS2 中添加圆角棘手。我…

网络协议TCP/IP 协议学习笔记一

T C P / I P通常被认 为是一个四层协议系统,每一层负责不同的功能: 1) 链路层,有时也称作数据链路层或网络接口层, 通常包括操作系统中的设备驱动程序和计算机 中对应的网络接口卡。它们一起处理与电缆(或其他任何传输…

CSS基础学习--26 渐变(Gradients)

CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡。以前,你必须使用图像来实现这些效果。但是,通过使用 CSS3 渐变(gradients),你可以减少下载的时间和宽带的使用。此外&…

Linux tracing之基于uprobe/kprobe的调试调优浅析

经过长期的发展, kprobes/uprobes 机制在事件(events)的基础上分别为内核态和用户态提供了追踪调试的功能, 这也构成了 tracepoint 机制的基础, 后期的很多工具, 比如 perf_events, ftrace 等都是在其基础上演化而来. 参考由 Brendan Gregg 提供的资料来看, kprobes/uprobes 在…

Minecraft我的世界服务器搭建之Linux系统,我的世界服务器推荐

Minecraft 是一个流行的沙箱独立游戏,由瑞典程序员 Markus “Notch” Perssion 首先创造,后来由 Mojang 开发并发布。这是一款关于打碎和放置砖块的游戏。首先,人们建造建筑物来抵抗夜晚的怪物,随着游戏的发展,玩家一起…

Spark Stream操作Kafka总结

kafka集群搭建 搭建参考 https://www.toutiao.com/article/6496743889053942286/?log_fromd5d6394cf75d_1687599146327 zk下载位置 国内:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 国外:Apache ZooKeeper kafka位置 国内&#xff…

Kubernetes(k8s)容器编排Pod介绍和使用

目录 1 Pod 特点1.1 网络1.2 存储 2 使用方式2.1 自主式Pod2.2 控制器管理的Pod 3 自主运行Pod3.1 创建资源清单3.1.1 参数描述 3.2 创建Pod3.3 Pod操作3.3.1 查看Pod列表3.3.2 查看描述信息3.3.3 访问pod3.3.4 删除Pod 4 控制器运行Pod4.1 创建资源清单4.2 参数描述4.2.1 Repl…

【IDEA】Directory创建多级目录的正确写法

在resource下创建包的时候,右键resourcenew的时候并没有Package,只有Directory 我们也可以用Directory创建包,但写法与在Package下创建包的写法会不一样 例如: 在directory创建包 我们在去看文件的时候 如果是用( com.dao.m…