JAVA面向对象编程 JAVA语言入门基础

news2024/11/18 17:43:41

类与对象的概念

类 (Class) 和对象 (Object)面向对象程序设计方法中最核心的概念

是对某一类事物的描述(共性),是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体的个体(个性),因而也称为实例(Instance) 。所谓“道生一,生万物”,所谓类就是“道”,其“万物”为对象。

面向对象程序设计思想的重点是类的设计,而不是对象的设计。

类的构成

类主要由数据成员(属性,Field)与函数成员(方法,Method)封装而成。

如下抽象定义:

[类修饰符] class 类名称

 {

           [修饰符] 数据类型  属性名;// 属性

           [修饰符] 类名称 (形参列表) {…} // 构造方法

           [修饰符] 返回值类型  方法名(形参列表){…} // 方法

}

定义类的语法格式

定义类

类修饰符可以是 public、abstract、final,类修饰符也可以省略

类名只要是合法的标识符即可(推荐驼峰规则)

类体可以由属性、方法、构造方法组成

属性的语法格式

定义属性:

语法格式:[修饰符] 属性类型 属性名 [= 默认值];

修饰符包括:public、private、protected、final、static 等

属性类型可以是基本数据类型或者引用数据类型

属性名遵守驼峰规则(第一个单词首字母小写,后面每个单词首字母大写)

默认值可以是基本数据类型字面值,也可以是对象

static 关键字修饰的属性被称为类属性否则被称为实例属性

方法的语法格式

定义方法

语法格式:[修饰符] 返回值类型 方法名(形参列表) {方法体}

方法的修饰符可以是 public、protected、private、static、final、abstract

方法名推荐用驼峰规则(同属性)

返回值类型可以是基本类型或引用类型。如果无返回值,要用 void 来声明

形参列表,可以由零个或多个组成,彼此用逗号(“,”)隔开

用 static 关键字修饰的方法被称为类方法,否则被称为实例方法

构造方法的语法格式

构造方法

语法格式:[修饰符] 类名(形参列表) {构造方法体}

修饰符可以是 public、protected、private

构造方法名必须和类名相同

构造方法没有返回值

如果程序员没有为 Java 类提供任何构造方法,则系统会默认为这个类提供一个无参的构造方法,一旦程序员提供了自定义的构造方法,则系统不再提供默认的构造器

例子:

定义圆柱体类型

class Cylinder{                            //定义圆柱体类 Cylinder
    private double radius;            //声明属性 radius
    private double height;           //声明属性 height
    private double pi=3.14;         //声明属性 pi 并赋初值
    
    public Cylinder(){                   // 构造方法
        radius = 1.0;
        height = 1.0;
    }
    
    public double area( ) {               //定义方法 area(),用来计算底面积
        return pi*radius* radius;
    }
    public double volume( ) {         //定义方法 volume(),用来计算体积
        return (pi*radius* radius)*height;
    }
}

 UML 图

UML 图 (Unified Modeling Language Diagram,UML) 称为统一建模语言或标准建模语言,是一个支持模型化和软件系统开发的图形化语言。

例子:定义一个圆柱体类 Cylinder,并创建相应对象,然后计算圆柱体的底面积和体积

// 定义一个圆柱体类 Cylinder,并创建相应对象,然后计算圆柱体的底面积和体积
class Cylinder {
    double r;
    double h;
    double dimMianJi() {
        return r * r * Math.PI;
    }

    double tiJi() {
        return dimMianJi() * h;
    }
}

public class App {
    public static void main(String[] args) {
        Cylinder Cylinder = new Cylinder();
        Cylinder.r = 2.8;
        Cylinder.h = 5;
        System.out.println("Area: " + Cylinder.dimMianJi());
        System.out.println("Volume: " + Cylinder.tiJi());
    }
}

对象的产生和使用

创建对象(实例)的方法:new 操作符

语法格式:类名 x = new 类名(实参列表)

x 是一个引用,关联到对象 new 类名(实参列表)

对于实例属性和实例方法,只能通过对象来调用

调用方式:x.实例属性名,x.实例方法名(实参列表)

对于静态属性和静态方法,即可以通过类调用,也可以通过对象调用

调用方式1:类名.静态属性名,类名.静态方法名(实参列表)

调用方式2:x.静态属性名,x.静态方法名(实参列表)

 例子:同时创建多个圆柱体的实例

class Cylinder {
    double r;
    double h;

    double dimMianJi() {
        return r * r * Math.PI;
    }

    double tiJi() {
        return dimMianJi() * h;
    }
}

public class App {
    public static void main(String[] args) throws Exception {
        Cylinder c1 = new Cylinder();
        Cylinder c2 = new Cylinder();
        c1.h = 1;
        c1.r = 2;
        c2.h = 3;
        c2.r = 4;
        System.out.println("c1.r = " + c1.r);
        System.out.println("c2.h = " + c2.h);
    }
}

 this 引用

每个实例方法和构造方法中均包含一个隐含形参:this 引用

this 引用指向当前对象,三种应用场景

第一,访问实例方法或实例属性,尤其是当形参与实例属性同名是,用 this 引用来区分形参和实例属性(this.实例属性名 = 形参名)// Cylinder(double radius, double height) {this.radius = radius; this.height = height;}

第二,返回当前对象:return this;

第三,调用其他构造方法:this(其他构造方法的形参列表)

static 方法中没有 this 引用

实例方法可以直接调用其他的实例方法,也可以调用其他的静态方法

例子:

public class App {
    double r;
    double h;

    public App setr(double r) {
        this.r = r;
        return this;
    }

    public App seth(double h) {
        this.h = h;
        return this;
    }

    public void setdh(double r, double h) {
        seth(h).setr(r);
    }

    public static void main(String[] args) throws Exception {
        App a = new App();
        a.setdh(2, 3);
        System.out.println(a.h + " " + a.r);
    }
}

方法扩展

方法的所属性

方法不能独立定义,必须定义在类中

方法不能独立执行:静态方法可以用类或者对象调用,实例方法只能用对象调用

方法的参数传递机制:值传递:基本数据类型,引用传递:引用类型

数组作为形参,数组作为返回值例子:

找数组最小值

public class App {
    public static int min(int[] nums) {
        int result = nums[0];

        for (int i = 1; i < nums.length; i++) {
            if (result > nums[i])
                result = nums[i];
        }

        return result;
    }

    public static void main(String[] args) throws Exception {
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        System.out.println("min = " + min(a));
    }
}

数组作为返回值:将一个矩阵转置后输出

public class App {
    static void daying(int[][] a) {
        for (int[] row : a) {
            for (int shu : row) {
                System.out.print(shu + "\t");
            }
            System.out.println();
        }
    }

    static int[][] diaohuan(int[][] b) {
        int[][] result = new int[b[0].length][b.length];// 注意行列的数量
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[0].length; j++) {
                result[j][i] = b[i][j];
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[][] mat = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };
        daying(mat);
        System.out.println();
        daying(diaohuan(mat));
    }
}

可变形参

定义方法时,在最后一个形参的类型后增加三点“…”(String… strs),多个参数值被当成数组存入strs中。

递归调用:在方法中调用自己 

属性扩展

成员变量(属性):在类范围里定义的变量;

局部变量:在方法或者代码块内部定义的变量。

不管是成员变量还是局部变量都遵守相同的命名规则(驼峰规则)。

成员变量分为类成员变量(类属性)和实例成员变量(实例属性)。类属性被所有对象共享,实例属性属于特定的对象

当类被加载时,类成员变量就在内存中分配一块内存空间

当对象被创建时,实例成员就在内存中分配一段内存空间 

访问方法:实例变量只能通过实例来访问;类变量既可以通过实例访问,也可以通过类访问

局部变量可分为三种:① 形参② 方法局部变量③ 代码块局部变量

除了形参外,其他局部变量都必须显式地初始化

Java 里允许局部变量和成员变量重名。这时需要用 this 引用或者类名来区分两者。

局部变量仅在方法或者代码块内有效

当方法执行完成时,局部变量会自动销毁。

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

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

相关文章

《边缘计算:连接未来的智慧之桥》

随着物联网、5G等技术的快速发展&#xff0c;边缘计算作为一种新兴的计算模式&#xff0c;正逐渐引起人们的广泛关注。边缘计算通过将数据处理和存储功能放置在距离数据产生源头更近的位置&#xff0c;实现了更快速、更可靠的数据处理和交换&#xff0c;为各行各业带来了前所未…

JS13-事件的绑定和事件对象Event

绑定事件的两种方式/DOM事件的级别 DOM0的写法&#xff1a;onclick element.onclick function () {}举例&#xff1a; <body> <button>点我</button> <script>var btn document.getElementsByTagName("button")[0];//这种事件绑定的方式…

SAP BAS开发Fiori项目中的各种文件详解(manifest.json, package.json, ui5.yaml, i18n等)

1. 背景 在SAP BAS中新建好一个Fiori项目后&#xff0c;系统会自动生成一系列的文件&#xff0c;例如package.json, ui5.yaml, manifest.json, i18n等。对于不熟悉web应用程序开发的同学&#xff0c;这些文件理解起来会很困惑。 在这篇文章中&#xff0c;我会详细介绍这些文件…

图论基础|841.钥匙和房间、463. 岛屿的周长

目录 841.钥匙和房间 思路&#xff1a;本题是一个有向图搜索全路径的问题。 只能用深搜&#xff08;DFS&#xff09;或者广搜&#xff08;BFS&#xff09;来搜。 463. 岛屿的周长 841.钥匙和房间 力扣题目链接 (opens new window) 有 N 个房间&#xff0c;开始时你位于 0…

部署mysql,前端,后端

部署mysql docker pull mysql 从镜像源中拉取镜像。 创建mysql容器 docker run -d \--name mysql_container \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \--restartalways \-v /opt/mysql:/var/lib/mysql \mysql -d后台运行&#xff0c;--name指定容器…

SpringBoot2.x 整合SpringDocJavadocknife4j实现无注解零入侵式接口文档

说明 基于 javadoc 无注解零入侵生成规范的 openapi 结构体。 文档工具使用 由于框架采用 openapi 行业规范 故市面上大部分的框架均支持 可自行选择 例如: apifox apipost postman torna knife4j 等 根据对应工具的文档接入即可 Swagger升级SpringDoc指南 常见功能如下 其他…

蓝桥杯day12刷题日记

P8720 [蓝桥杯 2020 省 B2] 平面切分 思路&#xff1a;首先借用dalao的图解释一下&#xff0c;又多出一条与当前平面任意一条直线都不重合线时&#xff0c;多了的平面是交点数1&#xff0c;所以用双层循环每次往里面加一条直线&#xff0c;计算交点 #include <iostream>…

Unity学习笔记 6.2D换帧动画

下载源码 UnityPackage 目录 1.导入图片 1.1. 图片的叠放顺序 2.图片切片 3.用动画控制器让马&#x1f40e;动起来 1.导入图片 直接拖拽进场景 检查 Texture Type&#xff08;纹理类型&#xff09;是否为 Sprite 创建2D精灵对象&#xff0c;拖拽图片到Sprite&#xff08…

【spring】@DependsOn注解学习

DependsOn介绍 DependsOn 是 Spring 框架中的一个注解&#xff0c;用于指定一个 bean 的依赖关系。当 Spring 容器初始化 bean 时&#xff0c;它会按照一定的顺序进行初始化。如果一个 bean 依赖于其他 bean&#xff0c;那么这个 bean 的初始化应该在依赖的 bean 之后进行。 …

2024年noc指导教师认证测评参考试题题目3-4合集

[noc指导教师认证] 测评参考试题 说明:NOC教师指导认证考试题目是从题库里抽题,因此每位老师每次考试题目都不一样以下题目为测试考试时收集到的一些题目,作为辅助提供给各位老师,老师们可以记住题目及答案的具体内容 (选项顺序会变),以免考试时遇到。2024年的做的题目有的…

MISC:zip压缩包伪加密破解及其结构解析

一.前言 遇到zip压缩包是被加密的&#xff0c;但加密有时侯是伪加密&#xff0c;需要我们进行破解。 二.压缩包解析 1. 压缩源文件数据区 zip文件头标记 文件头&#xff1a;504B0304 解压文件所需的pkware版本 全局方式位标记 如果四位中的第二位为奇数则表示有加密&#xff…

Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中&#xff0c;我们将了解如何将现有数据流&#xff0…

【Linux 进程概念】

【Linux 进程概念】 冯诺依曼体系结构冯诺依曼结构简要解释&#xff1a;你用QQ和朋友聊天时数据的流动过程 操作系统(OperatorSystem)概念设计OS的目的定位操作系统的上下层都分别是什么如何理解“管理"总结 进程基本概念描述进程-PCBtask_ struct内容 组织进程查看进程通…

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…

Web框架开发-Ajax

一、 Ajax准备知识:json 1、json(Javascript Obiect Notation,JS对象标记)是一种轻量级的数据交换格式 1 2 它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。…

手撕算法-删除有序数组中的重复项 II

描述 例如&#xff1a;输入&#xff1a;nums [1,1,1,2,2,3]输出&#xff1a;5, nums [1,1,2,2,3]解释&#xff1a;函数应返回新长度 length 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。 分析 双指针, fast, slow。nums[…

Redis高阶使用消息队列分布式锁排行榜等

一、前言 在大多数传统的web系统中&#xff0c;使用Redis一般都是作为缓存使用&#xff0c;在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用&#xff0c;还有做了注册中心&#xff0c;分布式事务。其他的强大的功能&#xff0c;没有…

【微服务】以模块化单体架构开发微服务应用

目录 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战我们知道,起初,单体应用有显著的优势:它们更容易开发和部署。从开发人员的角度来看,这种简单性是有益的。一切都是集中的,可以快速更新任何部分的业务逻辑并立即看到结果。这种开…

2024046期传足14场胜负前瞻

2024046期售止时间为3月26日&#xff08;周二&#xff09;19点30分&#xff0c;敬请留意&#xff1a; 本期深盘多&#xff0c;1.5以下赔率5场&#xff0c;1.5-2.0赔率4场&#xff0c;其他场次是平半盘、平盘。本期14场整体难度不大。以下为基础盘前瞻&#xff0c;大家可根据自身…