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

4.类的定义,变量类型,方法类型

文章目录

  • 1.类的概念
    • 1.1 如何创建一个类
    • 1.2 如何定义一个类
      • 1.2.1变量
      • 1.2.2 方法
  • 2.对象
  • 3.类定义使用实例
  • 4.理解类和对象的关系
    • 4.1.一个java程序和类之间的关系
  • 5.细节知识分析
    • 5.1.类与类的关系
    • 5.2.变量和变量区别
    • 5.3.方法的区别
    • 5.4.类方法和类变量的特点

1.类的概念

类java是基本要素,非常重要,怎么理解类的概念呢?
如果将Java程序当作一个工厂的话,那么类就是工厂里的电子设备的设计图纸,每个电子设备有其对应的属性和操作方法,而对象就是具体的电子设备,操作设备的工人知道电子设备的属性和操作方法后才能利用电子设备进行工作。
换句话说,类是创建对象的蓝图,而对象就是类的具体描述。

1.1 如何创建一个类

创建一个类需要的是用class关键字声明它,然后编写类体进行类的具体定义。

class 类名{
       类体的内容
}                 

class是声明类的关键字,当我们声明一个类后,我们需要用一对花括号去定义一个类,在花括号里编写java代码去定义一个类。例如:

class Person{
    
}

1.2 如何定义一个类

在Java中,一个类的类体包括如下内容:变量,方法

1.2.1变量

变量,就是存储数据的标识符,我们可以用基本的数据类型(或复杂的引用类型)去声明一个变量,使其作为类定义的一部分。
其中变量可分为:
成员变量(实例变量:对象级别的变量 ,类变量:类级别的变量,用static修饰)

class Person{
    int age;//实例变量
    static String type = "中国人";//类变量
}

局部变量:方法级别的变量,局部变量的作用域只是方法

class Person{
    int age;//实例变量
    static String type = "中国人";//类变量
    
    public void method(){
        int num;//局部变量            
    }
}

1.2.2 方法

方法可分为:构造方法,实例方法,类方法(用static修饰的方法)
构造方法,用于构造对象的方法,在Java中默认提供无参构造方法,我们也可以自己编写构造方法。
实例方法就是普通的方法,只有创建了类的实例对象,通过对象进行调用。
类方法是直接可以通过类名进行调用的方法。

class Person{
    int age;//实例变量
    static String type = "中国人";//类变量
    //构造方法,注意它的写法
    //构造方法是一个类的必要属性之一
    public Person(){            
    }
    //实例方法
    public void method(){
        int num;//局部变量            
    }
    //类方法
    public static void method2(){
            
    }
}

2.对象

通过类的学习,我们知道了类是构建对象的蓝图,下面我们学习如何使用类来构建对象并进行使用。

类名  对象名;
对象名  = new 类名();
//上面的是对象的创建,下面是对象的使用
对象名.变量名
对象名.方法()

问:除了new的方式,还有那些方式可以得到一个实例对象?
1)clone方式(克隆)(原型模式,了解即可)
2)newInstance方式(反射机制,了解即可)
3)反序列化方式(序列化机制,了解即可)
4)对于final类可以直接赋值得到,例如String直接就可以String s=“dfadf”
5)通过对象工厂获取(工厂模式,了解即可)
这样我们就生成了一个对象实例。

3.类定义使用实例

下面我们写了一个名为Computer的类,然后在类ObjectStudy中用它生成了实例并使用实例对象达到我们的目的。

/**
 * 此类展示对象操作。
 */
public class ObjectStudy {
    public static void main(String args[]){
        Computer com = new Computer();
        int m = 100;
        int n = 200;
        int result = com.add(m,n);
        result = com.add(120+m,n*10+8);
        System.out.println(result);
    }
}

class Computer{
    int add(int x,int y) {
        return x+y;
    }
}

运行结果:
在这里插入图片描述

4.理解类和对象的关系

4.1.一个java程序和类之间的关系

在这里插入图片描述

我自己的理解来看:如果把java程序看做一个工厂的话,类就是工厂里的电子设备的设计图纸,电子设备有其对应的属性和操作方法,而对象就是电子设备的实体,控制设备的工人知道电子设备的属性和操作方法后才能利用电子设备可以生产出产品。

5.细节知识分析

5.1.类与类的关系

我个人认为类分为主类和子附属类(相当于一个公司的boss和员工,而这个关系是逐级递分的,就是说子附属类的下级可以有子子附属类),主类是最终要运行的那个类,它一般是决策类。主类和其子类的组成的工程的类层次结构。

5.2.变量和变量区别

实例变量:简单来说就是方法外,类里声明的变量,它作用于对象级别
局部变量:简单来说就是方法内声明的变量,它作用于方法级别
类变量:用static修饰的方法外,类里声明的变量,它作用于类级别
在方法体里的局部变量优先级高于成员变量(如果出现局部变量和实例变量同名的情况)

5.3.方法的区别

方法分为构造方法,实例方法,类方法:
**构造方法:**是类中的一种特殊的方法,当程序用类创建对象是需要使用它的构造方法。构造方法没有类型,它的名字和其类名完全相同。如果没有写,编译器会自动给一个空的构造方法。

**实例方法:**实例方法具有入参,出参,方法名等结构,它代表一个实例的能力,通常用来定义业务处理逻辑。

**类方法:**类方法就是用static修饰的实例方法,它代表一个类的能力,通常用来定义算法类的方法。

5.4.类方法和类变量的特点

类方法和类变量拥有各自独自的内存空间,且只有一个。

代码地址:
https://gitee.com/yan-jiadou/study/tree/master/Java%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0/src/main/java/exa04

关于方法的具体分析在下一篇博客会详细说明。

相关文章:

  • pytorch中一些有关tensor的操作
  • 大数的乘法
  • DQL操作(数据库表数据查询操作)
  • linux共享内存
  • 小波神经网络的基本原理,小波神经网络什么意思
  • 被一位读者赶超,手摸手 Docker 部署 ELK Stack
  • Math类(Java)
  • Android项目中各文件的作用
  • Java比较器(Comparable接口)
  • ESP Insights 支持通过高级筛选进行分组分析
  • 网课答案公众号搭建的题库接口提供
  • 网课答案公众号题库在这里直接搭建使用
  • Elasticsearch: Query string与Simple query string
  • 训练神经网络用什么显卡,cpu可以训练神经网络吗
  • 中秋节到啦!程序媛请大家品尝月饼啊
  • 【Amaple教程】5. 插件
  • CSS相对定位
  • Git 使用集
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JS学习笔记——闭包
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel Telescope:优雅的应用调试工具
  • nfs客户端进程变D,延伸linux的lock
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Solarized Scheme
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue.js源码(2):初探List Rendering
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 每天一个设计模式之命令模式
  • 容器服务kubernetes弹性伸缩高级用法
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 运行时添加log4j2的appender
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Semaphore
  • # 数论-逆元
  • #AngularJS#$sce.trustAsResourceUrl
  • (07)Hive——窗口函数详解
  • (11)MATLAB PCA+SVM 人脸识别
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)u-boot-nand.bin的下载
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 8.0 发布到 IIS
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net Remoting常用部署结构
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 发展历程
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .Net程序帮助文档制作