四、 java的对象和类

news/2024/5/6 16:53:31/文章来源:https://blog.csdn.net/m0_58680865/article/details/126652686

四、 java的对象和类

  • 对象(Object):对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • 类(class):类是现实生活的模板,它描述一类对象的行为和状态,可以看成是创建 Java 对象的模板。比如鸟类。

下图中汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。
在这里插入图片描述

java的类

在这里插入图片描述
通过上图创建一个简单的类来理解下 Java 中类的定义:

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){}
}

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。如下代码所示,name就是局部变量。
void eat() {String name = null}
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。如下代码所示,breed、size、colour、age都是成员变量。
public class Dog {String breed;int size;String colour;int age;
}
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。如下代码所示,sql就是类变量。
public class Dog {private static final String sql = "SELECT_NAME_FROM_TABLE";
}

一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。

构造方法

每个类都有构造方法。如果没有定义构造方法,java编译器会为该类提供一个默认的无参构造方法

构造方法的作用:创建java对象(实例)。

构造方法分为两类:

  1. 有参构造方法
  2. 无参构造方法

构造方法特征:方法名和类名相同,没有返回值,也没有void关键字。一个类可以有多个构造方法。

代码示例:

public class Dog {String name;//无参构造方法public Dog() {}//有参构造方法public Dog(String name) {this.name = name;System.out.println("小狗的品种是:"+name);}
}

创建对象

实例化:使用关键字 new 来创建一个对象。

public static void main(String[] args) {Dog dog = new Dog("中华田园犬");//调用有参构造方法Dog dog2 = new Dog();//调用无参构造方法}

执行main方法控制台打印结果:

小狗的品种是:中华田园犬

访问类中的变量和方法

类中的一切成员变量和方法都是通过对象来访问调用。

实例代码:

public class Dog {String name;public Dog() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public static void main(String[] args) {Dog dog = new Dog();//调用无参构造方法创建对象dog.setName("中华田园犬");//通过对象实力调用set方法dog.getName();//通过对象实力调用get方法System.out.println("打印结果:"+dog.name);//访问成员变量}
}

打印结果:

在这里插入图片描述

java内部类

内部类即Java 一个类中可以嵌套另外一个类,语法格式如下:

class OuterClass {   // 外部类// ...class InnerClass { // 嵌套类,或称为内部类// ...}
}

要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。

嵌套类有两种类型:

  1. 非静态内部类
  2. 静态内部类

非静态内部类

非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。

由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现

示例代码:

class OuterClass {int out = 8;class InnerClass {int inner = 6;}
}public static void main(String[] args) {OuterClass outerClass = new OuterClass();OuterClass.InnerClass innerClass = outerClass.new InnerClass();System.out.println("外部类的成员变量是:"+outerClass.out+" ,内部类的成员变量是:"+innerClass.inner);}

控制台打印结果:

外部类的成员变量是:8 ,内部类的成员变量是:6

私有的内部类

内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符:

class OuterClass {int out = 8;private class InnerClass {int inner = 6;}
}

由于内部类被private修饰,外部类无法访问,所以main方法创建实例报错:
在这里插入图片描述

静态内部类

静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问它:

class OuterClass {int out = 8;static class InnerClass {int inner = 6;}public static void main(String[] args) {OuterClass.InnerClass innerClass = new OuterClass.InnerClass();System.out.println("内部类的成员变量是:" + innerClass.inner);}

打印结果:

内部类的成员变量是:6

注意:静态内部类无法访问外部类的成员。

从内部类访问外部类成员

内部类一个高级的用法就是可以访问外部类的属性和方法:

class OuterClass {int out = 8;class InnerClass {public int myInnerMethod() {return out;}}public static void main(String[] args) {OuterClass myOuter = new OuterClass();OuterClass.InnerClass myInner = myOuter.new InnerClass();System.out.println(myInner.myInnerMethod());}

打印结果:

8

java匿名类

什么是匿名类?

Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化

匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。

匿名类语法格式:

class outerClass {// 定义一个匿名类object1 = new Type(parameterList) {// 匿名类代码};
}

以上的代码创建了一个匿名类对象 object1,匿名类是表达式形式定义的,所以末尾以分号 ; 来结束。

匿名类通常继承一个父类或实现一个接口。
在这里插入图片描述

匿名类继承一个父类

以下实例中,创建了 Animal 类,该类只有一个方法 show(),AnonymousDemo 类继承了 Animal 类并重写了 Animal 类的 show() 方法:

class Animal {public void show() {System.out.println("在 Animal 类内部");}
}public class AnonymousDemo {public void createClass() {Animal animal = new Animal() {public void show() {System.out.println("在匿名类内部。");}};animal.show();}
}public static void main(String[] args) {AnonymousDemo anonymousDemo = new AnonymousDemo();anonymousDemo.createClass();}

打印结果:

在匿名类内部。

匿名类实现一个接口

interface Animal {void show();
}public class AnonymousDemo {public void createClass() {Animal animal = new Animal() {public void show() {System.out.println("在匿名类内部。");}};animal.show();}
}public static void main(String[] args) {AnonymousDemo anonymousDemo = new AnonymousDemo();anonymousDemo.createClass();}

打印结果:

在匿名类内部。

拓展连接:java具体类

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物理服务器安装CentOS 7操作系统

目录 1、下载系统镜像 2、制作安装盘 2.1 方法一:光盘制作 2.2 方法二:U盘制作 3、更改bios启动顺序 4、安装CentOS 7操作系统 4.1 安装命令选择,及常见错误解决 4.2 语言选择 4.3 时区选择 4.4 软件选择 4.5 安装位置选择 4.6 手…

猿创征文|【C++游戏引擎Easy2D】学C++还不会绘制一个简单的二维图形?一篇文章教会你

🧛‍♂️iecne个人主页::iecne的学习日志 💡每天关注iecne的作品,一起进步 💪学C必看iecne 本文专栏:【C游戏引擎】. 🐳希望大家多多支持🥰一起进步呀! ✨前…

Apache Maven 3.6.0的下载安装和环境配置(详细图解+不限速下载链接)

标题工具/原料 apache-maven-3.6.0 下载地址 云盘不限速下载 或者进入官网按下图下载 方法/步骤一 安装 打开压缩包,将maven压缩包解压至软件安装处,建议D根目录或其他,记住安装位置 类似于 方法/步骤二 环境变量配置 变量 1.新建变…

Eolink 通过可信云权威认证,数据保护能力业内领先!

Eolink 正式通过由中国信息通信研究院组织发起的可信云评估考核,在数据安全保障领域获得权威认证,并荣获 “企业级 SaaS 服务” 认证证书。 在云时代,保护用户数据安全、预防隐私泄露是数字化企服厂商的重中之重。Eolink 作为一个 API 在线管…

计算机毕业设计ssm+vue基本微信小程序的个人健康管理系统

项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了小程序的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数…

IIC协议详解

文章目录1 IIC简介2 IIC物理层2.1 IIC硬件2.2 IIC协议特点3 IIC协议层4数据传输4.1 IIC写数据4.2 IIC读数据1 IIC简介 IIC(Inter-Integrated Circuit)总线是一种由 NXP(原 PHILIPS)公司开发的两线式串行总线, 用于连接微控制器及其…

s19.基于 Kubernetes v1.25.0(kubeadm) 和 Docker 部署高可用集群(一)

基于 Kubernetes v1.25.0 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成容器运行时 CRIKubernetes v1.25 新特性Kubernetes v1.24 之后不再支持 Docker 的解决方案Kubernetes v1.25 高可用集群架构基于 Kubernetes v1.25.0 和 Docker 部署高可用集群实战案例 …

Redis持久化机制分析

什么是持久化? 简单来说持久化就是将数据保存到磁盘,让即使服务宕机、重启、断电等操作后数据仍热存在,并且是完整的。 1、为什么要持久化? 1、Redis是一个内存数据库,宕机之后存储在内存的数据会消失。2、Redis重启…

传述最详细的干货,让简历面试不再成为你找工作的绊脚石

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

【蓝桥杯省赛真题37】Scratch三国演义字数统计 少儿编程scratch编程蓝桥杯省赛真题讲解

​​​​​​​ 目录 scratch三国演义字数统计 一、题目要求 编程实现 二、案例分析 1、角色分析

Linux内核设计与实现 第三章 进程管理

3.1进程 实际上,进程就是正在执行的程序代码的实时结果。 进程是出于执行期的程序以及相关的资源的总称。 进程的另一个名字是任务。 进程不仅仅局限于一段可执行程序代码通常进程还要包含其他资源,像打开的文件,挂起的信号,内核…

springboot项目整理(持续更新)

SpringSecurity 1.导入依赖&#xff1a; 在pom.xml中导入依赖&#xff0c;再访问页面就会出现login&#xff0c;这是SpringSecurity自己写的页面&#xff0c;用于登录认证 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

整合流量与资源的分享购商业模式,实现整个生态布局

大多数企业都很容易忽视一个市场&#xff0c;就是我们的日常生活服务板块&#xff0c;所谓民以食为天&#xff0c;我们应该顺应人们的生活习惯而做出来的电商商业模式&#xff0c;才是最贴合民心的&#xff0c;也能够从用户的最基础的需求出发来为其打造商业模式。 将目标放在生…

Room (三) RecyclerView 呈现列表数据

1. 用到的组件 Room&#xff0c;ViewModel&#xff0c;LiveData&#xff0c;Repository&#xff0c;AsyncTack 2. Module 中 build.gradle 文件中添加 dependencies {def room_version "2.4.3"implementation "androidx.room:room-runtime:$room_version&quo…

【Linux操作系统】-- 多线程(三)-- 线程池+单例模式

目录 线程池 场景 代码实现 线程安全的单例模式 懒汉实现方式和懒汉实现方式 饿汉方式实现单例模式 懒汉方式实现单例模式 实战代码演练单例模式 线程池 在C中用户使用new/malloc都是向操作系统OS申请的&#xff0c;在系统的角度&#xff0c;就相当于new/malloc在底层封…

MySQL之临时表

写在前面 本文一起看下MySQL的临时表。 1&#xff1a;什么是临时表 通过create temporary table t语句创建的表&#xff0c;就是临时表&#xff0c;临时表的临时体现在其是其生命周期是和会话一样的&#xff0c;当会话结束&#xff0c;即连接关闭时MySQL会自动将创建的临时表…

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求 离子液体(ILs)&#xff0c;是完全由离子组成的液体&#xff0c;可以进一步定义为熔点低于100C的熔盐。 离子液体是在室温或接近室温下可呈现液体的液态有机盐。离子液体因具有一些优良的特性使其在分离…

树的直径 树形dp+2次dfs

题目描述 给定一棵树 T &#xff0c;树 T 上每个点都有一个权值。 定义一颗树的子链的大小为&#xff1a;这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 输入描述: 第一行输入一个 n,1≤n≤105。 接下来一行包含n个数&#xff0c;对于每个数 ai,−10^5…

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑&#xff0c;今天我们来看一看如何去设置标题、封面和剧情&#xff0c;实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨&#xff0c;把这样的脚本写出来&#xff0c;怎么样去做&#xff1f;你要把特效、悬…

PCL 生成空间圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 三维空间圆形式如下: 三维空间圆的参数方程: { x ( θ ) = c