Java基础6--对象和类

2023-11-16

Java基础6–对象和类

概念

对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

:类是一个模板,它描述一类对象的行为和状态。

Java中的对象

看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

下图中男孩(boy)女孩(girl)类(class),而具体的每个人为该类的对象(object)

在这里插入图片描述

Java 中的类

类可以看成是创建 Java 对象的模板。

在这里插入图片描述

通过上图创建一个简单的类来理解下 Java 中类的定义:

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

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

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

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

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

public class Puppy{
    public Puppy(){
    }
 
    public Puppy(String name){
        // 这个构造器仅有一个参数:name
    }
}

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。

下面是一个创建对象的例子:

public class Puppy{
   public Puppy(String name){
      //这个构造器仅有一个参数:name
      System.out.println("小狗的名字是 : " + name ); 
   }
   public static void main(String[] args){
      // 下面的语句将创建一个Puppy对象
      Puppy myPuppy = new Puppy( "tommy" );
   }
}
//小狗的名字是 : tommy

访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法,如下所示:

/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();

下面的例子展示如何访问实例变量和调用成员方法:

public class Puppy{
   int puppyAge;
   public Puppy(String name){
      // 这个构造器仅有一个参数:name
      System.out.println("小狗的名字是 : " + name ); 
   }
 
   public void setAge( int age ){
       puppyAge = age;
   }
 
   public int getAge( ){
       System.out.println("小狗的年龄为 : " + puppyAge ); 
       return puppyAge;
   }
 
   public static void main(String[] args){
      /* 创建对象 */
      Puppy myPuppy = new Puppy( "tommy" );
      /* 通过方法来设定age */
      myPuppy.setAge( 2 );
      /* 调用另一个方法获取age */
      myPuppy.getAge( );
      /*你也可以像下面这样访问成员变量 */
      System.out.println("变量值 : " + myPuppy.puppyAge ); 
   }
}
//小狗的名字是 : tommy
//小狗的年龄为 : 2
//变量值 : 2

Java 内部类

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

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

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

嵌套类有两种类型:

  • 非静态内部类
  • 静态内部类

非静态内部类

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

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

class OuterClass {
  int x = 10;
//内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符,执行会报错
  /*private*/ class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}
// 15

静态内部类

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

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}
//5

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

从内部类访问外部类成员

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

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

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

import 语句

在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类

import java.io.*;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础6--对象和类 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 如何在 Spring 属性中进行算术运算?

  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 16 【跨域】

    16 跨域 1 什么是跨域 跨域 是指浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 是浏览器对JavaScript实施的安全限制 浏览器从一个域名的网页去请求另一个域名的资源时 出现域名 端口 协议任一不同 都属于跨域 同源策
  • 芯片测试(3)——DC测试

    芯片测试 3 DC测试 一 电源电压测试 二 地引脚测试 三 I V测试 四 电阻测试 五 对应测试项 六 简述及测试方法描述 6 1 VIL VIH 加流测压 FIMV 6 2 VOL VOH 加流测压 FIMV 6 3 IIL IIH
  • pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

    换了新电脑 在新电脑中安装了pycharm 但是在使用pip install下载相关库时 出现pip 无法将 pip 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 的
  • 给锂电池充电,充电器的输出电压

    目录 老旧充电器的一点小问题 指示灯不亮 拆 丢弃 给锂电池充电 指示灯无法显示充电状态 如何判断电池是否充满电了 电池反向充电 总结 老旧充电器的一点小问题 指示灯不亮 今天遇到一个有意思的问题 我买了两个12V的锂电池 DC接口 于是我
  • 2023年高校大数据实验室建设方案

    大数据实验室建设方案具体内容包括 人才培养方案建设 课程资源建设 师资建设 实验室建设 教学服务建设 泰迪打造国内领先的大数据人工智能及课程资源 包括 商务数据分析实训管理平台 云计算资源管理平台 大数据编程实训平台 商务数据分析编程实训平
  • Unity ScrollView拖不动

    今天再用Unity的imgui的ScrollView的时候 发现UI拖不动 找了好半天 终于招到了原因 在此记录下 代码如下 public Vector2 scrollPosition Vector2 zero void OnGUI scr
  • 移动端与服务端交互安全方案

    系统流程图 验签 解决问题 1 身份验证 是否是我规定的那个人 2 防篡改 是否被第三方劫持并篡改参数 3 防重放 是否重复请求 具体算法 1 约定appKey 保证该调用请求是平台授权过的调用方发出的 保证请求方唯一性 2 将appKey
  • 常用巡检命令

    思科设备 show version 查看系统软 硬件版本信息 show running config 查看设备运行的配置信息 show ip interfaces brief 查看所有接口摘要信息 show interfaces 查看全部接
  • Java中弹出对话框中的几种方式

    1 显示一个错误对话框 该对话框显示的 message 为 alert JOptionPane showMessageDialog null alert alert JOptionPane ERROR MESSAGE 2 显示一个内部信息对
  • JavaSE知识体系目录

    文章目录 Java基础语法知识 关键字 运算符 数据类型 流程控制语句 面向对象 异常和常用类 集合 Collection Map IO 字节流 字符流 线程 网络 Java基础语法知识 关键字 运算符 算数运算符 比较运算符 赋值运算符
  • CSS盒模型自适应布局——calc与box-sizing

    CSS盒模型 1 CSS中盒模型分为两种 第一种是W3C的标准模型 即盒子的宽高等于内容的宽高 盒子的padding和border不计算在内 第二种是IE的传统模型 IE6以下 不含IE6 称为怪异模式或者QuirksMode 即盒子的宽高
  • sklearn中的LASSO

    LASSO import numpy as np import matplotlib pyplot as plt np random seed 42 x np random uniform 3 0 3 0 size 100 X x resh
  • pytorch 笔记: Swin-Transformer 代码

    理论部分 论文笔记 Swin Transformer Hierarchical Vision Transformer using Shifted Windows UQI LIUWJ的博客 CSDN博客 源码部分 Swin Transform
  • Java占位符总结

    文章目录 实现方式 方式一 jdk1 8 java text MessageFormat 方式二 Log4j javaorg slf4j helpers MessageFormatter 方式三 commons text org apach
  • linux下搭建goprotobuf

    linux下搭建goprotobuf 1 搭建go语言环境 参考官网 http golang org doc install 主要是设置好GO PATH这个变量 这个就是你的工作环境目录 可以使用go env来查询设置好了没 2 搭建pro
  • python中列表概念,Python基本数据类型——List(列表)

    1 序列 1 1 序列的基本概念 序列是Python中最基本的一种数据结构 序列用于保存一组有序的数据 所有的数据在序列当中都有一个唯一的位置 索引 并且序列中的数据会按照添加的顺序来分配索引 数据结构是指计算机中数据存储的方式 1 2 序
  • Pinpoint--基础--04--请求追踪和字节码插装

    Pinpoint 基础 04 请求追踪和字节码插装 备注 背景 英文原文 https naver github io pinpoint 1 8 4 techdetail html Dapper原文 https ai google resea
  • 00后卷王自述,我真的很卷吗?

    前段时间我去面试了一个软件测试公司 成功拿到了offer 薪资也从10k涨到了18k 对于工作都还没两年的我来说 还是比较满意的 毕竟有些工作了3到4年的可能还没有我的高 在公司一段时间后大家都说我是卷王 其实我也没办法 自己家里条件不是很
  • Pytorch ----注意力机制与自注意力机制的代码详解与使用

    注意力机制的核心重点就是让网络关注到它更需要关注的地方 当我们使用卷积神经网络去处理图片的时候 我们会更希望卷积神经网络去注意应该注意的地方 而不是什么都关注 我们不可能手动去调节需要注意的地方 这个时候 如何让卷积神经网络去自适应的注意重
  • Java基础6--对象和类

    Java基础6 对象和类 文章目录 Java基础6 对象和类 概念 Java中的对象 Java 中的类 构造方法 创建对象 访问实例变量和方法 Java 内部类 非静态内部类 静态内部类 从内部类访问外部类成员 import 语句 概念 对