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

类与对象的概念

类 (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 引用或者类名来区分两者。

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

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

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

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

相关文章

网络协议栈--传输层--UDP/TCP协议

目录 本节重点一、再谈端口号1.1 再谈端口号1.2 端口号范围划分1.3 认识知名端口号(Well-Know Port Number)1.4 回答两个问题1.5 netstat1.6 pidof 二、UDP协议2.1 UDP协议段格式2.2 UDP的特点2.3 面向数据报2.4 UDP的缓冲区2.5 UDP使用注意事项2.6 基于UDP的应用层协议2.7 UDP…

知攻善防应急靶场-Linux(2)

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全应急响应和知攻善防实验室靶场&#xff0c;记录自己的学习过程&am…

JAVA学习笔记20(面向对象编程)

1.3 方法递归调用 ​ *阶乘 public int factorial(int n) {if(n 1){return 1;}else{return factorial(n-1)*n;} }1.递归重要规则 1.执行一个方法时&#xff0c;就创建一个新的受保护的独立空间&#xff08;栈空间&#xff09; 2.方法的局部变量是独立的&#xff0c;不会相互…

反序列化漏洞简单知识

目录&#xff1a; 一、概念&#xff1a; 二、反序列化漏洞原因 三、序列化漏洞的魔术方法&#xff1a; 四、反序列化漏洞防御&#xff1a; 一、概念&#xff1a; 序列化&#xff1a; Web服务器将HttpSession对象保存到文件系统或数据库中&#xff0c;需要采用序列化的…

Cobalt Strike -- 各种beacon

今天来讲一下cs里面的beacon 其实cs真的功能很强大&#xff0c;自带代理创建&#xff0c;自带beacon通信&#xff01;&#xff01;&#xff01; 一张图&#xff0c;就能说明beacon的工作原理 1.Beacon 每当有一台机器上线之后&#xff0c;我们都会选择sleep时间&#xff0c;…

代码随想录算法训练营Day56 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

647. 回文子串 dp[i][j]表示第i位开始&#xff0c;第j位结束的字符串是否为回文串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1…

Redis 教程系列之Redis PHP 使用 Redis(十二)

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 PHP redis 驱动&#xff0c;且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动&#xff1a;下载地址为:https://github.com/phpredis/phpredis/releases。 P…

Java微服务分布式分库分表ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

垂直起降机场:飞行基础设施的未来是绿色的

电动垂直起降&#xff08;eVTOL&#xff09;飞机的日益发展为建立一个新的网络来支持它们提供了理由&#xff0c;这将推动开发绿色基础设施新模式的机会。这些电气化的“短途”客运和货运飞机通常被描述为飞行汽车&#xff0c;是区域飞行和城市出租车的未来&#xff0c;有可能提…

为什么 Hashtable 不允许插入 null 键 和 null 值?

1、典型回答 浅层次的来回答这个问题的答案是&#xff0c;JDK 源码不支持 Hashtable 插入 value 值为 null&#xff0c;如以下JDK 源码所示&#xff1a; 也就是JDK 源码规定了&#xff0c;如果你给 Hashtable 插入 value 值为 null 就会抛出空指针异常 并目看上面的JDK 源码可…

2024全新多语言海外抢单刷单系统源码 订单自动匹配 支持分组 代理后台

2024全新多语言海外抢单刷单系统源码 订单自动匹配 支持分组 代理后台 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88948076 更多资源下载&#xff1a;关注我。

蓝桥杯基础练习详细解析一(代码实现、解题思路、Python)

试题 基础练习 数列排序 资源限制 内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200 输入格式 第…

吴恩达2022机器学习专项课程(一) 3.6 可视化样例

问题预览 1.本节课主要讲的是什么&#xff1f; 2.不同的w和b&#xff0c;如何影响线性回归和等高线图&#xff1f; 3.一般用哪种方式&#xff0c;可以找到最佳的w和b&#xff1f; 解读 1.课程内容 设置不同的w和b&#xff0c;观察模型拟合数据&#xff0c;成本函数J的等高线…

MQ领消息丢失方案

⼀、哪些场景会丢失消 业务场景&#xff1a;下单⽀付成功后、给⽤户发送消费 ⽤户反馈&#xff1a;⽀付成功以后&#xff0c;没有收到优惠券。原因&#xff1a;⽀付成功的消息丢失了 ⼆、可能丢失消息的环节&#xff1a; 1、订单系统&#xff08;⽣产者&#xff09;向MQ推送…

pytorch 实现线性回归 softmax(Pytorch 04)

一 softmax 定义 softmax 是多分类问题&#xff0c;对决策结果不是多少&#xff0c;而是分类&#xff0c;哪一个。 为了估计所有可能类别的条件概率&#xff0c;我们需要一个有 多个输出的模型&#xff0c;每个类别对应一个输出。为了解决线 性模型的分类问题&#xff0c;我们…

Linux cp、mv命令显示进度条

1.advcpmv 平常使用cp 拷贝大文件时&#xff0c;看不到多久可以完成&#xff0c;虽然加上-v参数也只能看到正在拷贝文件&#xff0c;那就使用以下方法实现 git clone https://github.com/jarun/advcpmv.git cd advcpmv/ bash install.shmv ./advcp /usr/local/bin/ mv ./advmv …

【旅游景点项目日记 | 第二篇】基于Selenium爬取携程网景点详细数据

文章目录 3.基于Selenium爬取携程网景点详细数据3.1前提环境3.2思路3.3代码详讲3.3.1查询指定城市的所有景点3.3.2获取详细景点的访问路径3.3.3获取景点的详细信息 3.4数据库设计3.5全部代码3.6效果图 3.基于Selenium爬取携程网景点详细数据 3.1前提环境 确保安装python3.x环…

生产力工具|安装更新R软件(R、studio)

内容介绍&#xff1a; 安装R软件&#xff1a; 下载 R X64 3.5.1: 访问官方R网站 https://cran.r-project.org/。选择适合Windows版本的安装包。将安装包下载到您的计算机。 本地安装: 运行下载的“R-3.5.1-win.exe”文件。按照安装向导&#xff0c;选择安装路径&#xff0c;取消…

Windows 进程权限浅谈 -- 提权 / 降权

在 Windows 上&#xff0c;用户对权限并不敏感&#xff0c;可能最为直观的是 UAC &#xff0c;但相信很多人已经关掉了它的提示。 但其实安全性早已深入了 Windows 的方方面面。Windows Vista 引入了一个称为强制完整性控制&#xff08;Mandatory Integrity Controls&#xff0…

BMS设计中的短路保护和MOSFET选型(上)

电池管理系统&#xff08;BMS&#xff09;是一种能够对电池进行监控和管理的电子装备&#xff0c;是电池与用户之间的纽带。通过对电压、电流、温度以及SOC等数据采集&#xff0c;计算进而控制电池的充放电过程&#xff0c;主要就是为了能够提高电池的利用率&#xff0c;防止电…