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{                            //定义圆柱体类 Cylinderprivate double radius;            //声明属性 radiusprivate double height;           //声明属性 heightprivate 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.rhkb.cn/news/284800.html

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

相关文章

透视未来工厂:山海鲸可视化打造数字孪生新篇章

在信息化浪潮的推动下&#xff0c;数字孪生工厂项目正成为工业制造领域的新宠。作为一名山海鲸可视化的资深用户&#xff0c;我深感其强大的数据可视化能力和数字孪生技术在工厂管理中的应用价值&#xff0c;同时我们公司之前也和山海鲸可视化合作制作了一个智慧工厂项目&#…

学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)

https://www.nandgame.com/ 免费 https://store.steampowered.com/app/1444480/Turing_Complete/ 收费&#xff0c;70元。据说可以导出 Verilog &#xff01;

转座子插入位点分析4------PS转座子测序数据分析

观察数据 这是经公司使用fastp质控后的数据&#xff0c;我们先挑选部分数据进行比对&#xff0c;观察序列结构 为了准确性&#xff0c;我们再次挑选另一批数据进行比对 可以看到&#xff0c;所有序列都存在一个“GTGTCAAATACTTATTTTCCCCGCTGTA”的前导序列&#xff0c;这可能…

深度学习pytorch——多层感知机反向传播(持续更新)

在讲解多层感知机反向传播之前&#xff0c;先来回顾一下多输出感知机的问题&#xff0c;下图是一个多输出感知机模型&#xff1a; 课时44 反向传播算法-1_哔哩哔哩_bilibili 根据上一次的分析深度学习pytorch——感知机&#xff08;Perceptron&#xff09;&#xff08;持续更新…

突破边界:Web3开启数字化社会的新纪元

引言 随着科技的不断进步和数字化社会的发展&#xff0c;Web3正逐渐成为了人们关注的焦点。作为新一代互联网的演进形态&#xff0c;Web3具有突破传统边界、实现去中心化的特点&#xff0c;被认为将开启数字化社会的新纪元。本文将深入探讨Web3的概念、特点、应用场景&#xf…

Java 自定义线程池实现

自定义线程池 简介任务图示阻塞队列 BlockingQueue<T>ReentrantLock代码 线程池 ThreadPool工作线程类 Worker 拒绝策略接口代码测试类 TestThreadPool为什么需要j i&#xff1f;&#xff08;lambad表达式相关&#xff09; 测试结果拒绝策略&#xff1a;让调用者自己执行…

外包干了6天,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

mysql80-DBA数据库学习1

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

Qt 写一个邮件发送程序

最近在完成一个邮箱代替的告警功能&#xff0c;写了一个邮件发送的demo 以下为代码&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QTcpSocket> namespace Ui { class MainWindow; }class MainWindow : public QMainWin…

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器&#xff1f;1.1设计一个简单的空间配置器&#xff0c;JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器&#xff0c;std::allocator2.2 SGI特殊的空间配置器&#xff0c;std::alloc2.…

Java代码基础算法练习-公式求和-2024.03.24

任务描述&#xff1a; 求公式Snaaaaaa…aa…aaa&#xff08;有n个a&#xff09;之值&#xff0c;其中a是一个数字&#xff0c;为2。 例如&#xff0c;n5 时222222222222222&#xff0c;n 由键盘输入(n<5)。 任务要求&#xff1a; package march0317_0331;import java.util.…

【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件

文章目录 一、下载安装二、配置显示语言&#xff08;一&#xff09;调出即将输入命令的搜索模式&#xff08;二&#xff09;在大于号后面输入&#xff1a;Configure Display Language&#xff08;三&#xff09;重启 三、总结 【运行系统】win 11 【本文解决的问题】 1、英文不…

代码随想录算法训练营第三十一天|455.分发饼干,376.摆动序列,53. 最大子序和

455.分发饼干 题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff…

wy的leetcode刷题记录_Day93

wy的leetcode刷题记录_Day93 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-23 前言 目录 wy的leetcode刷题记录_Day93声明前言2549. 统计桌面上的不同数字题目介绍思路代码收获 827. 最大人工岛题目介绍思路代码收获 200. 岛屿…

【Godot4.2】像素直线画法及点求取函数

概述 基于CanvasItem提供的绘图函数进行线段绘制只需要直接调用draw_line函数就可以了。 但是对于可以保存和赋值节点直接使用的纹理图片&#xff0c;却需要依靠Image类。而Image类没有直接提供基于像素的绘图函数。只能依靠set_pixel或set_pixelv进行逐个像素的填色。 所以…

数字乡村发展策略:科技引领农村实现跨越式发展

随着信息技术的迅猛发展和数字经济的崛起&#xff0c;数字乡村发展策略已经成为引领农村实现跨越式发展的重要手段。科技的力量正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式&#xff0c;为农村经济发展注入了新的活力和动力。本文将从数字乡村的内涵、…

java每日一题——买啤酒(递归经典问题)

前言&#xff1a; 非常喜欢的一道题&#xff0c;经典中的经典。打好基础&#xff0c;daydayup!!!啤酒问题&#xff1a;一瓶啤酒2元&#xff0c;4个盖子可以换一瓶&#xff0c;2个空瓶可以换一瓶&#xff0c;请问10元可以喝几瓶 题目如下&#xff1a; 啤酒问题&#xff1a;一瓶…

基于图的在线社区假新闻检测建模

论文原文&#xff1a;Graph-based Modeling of Online Communities for Fake News Detection 论文代码&#xff1a;GitHub - shaanchandra/SAFER: Repository containing the official code for the paper Graph-based Modeling of Online Communities for Fake News Detectio…

KIMI爆了!对比文心一言和通义千问它到底有多强?

原文:赵侠客 前言 最近国产大模型KIMI爆了大部分人应该都知道了&#xff0c;从我个人的感受来看这次KIMI爆了我不是从技术领域接触到的&#xff0c;而是从各种金融领域接触到的。目前国内大模型可以说是百模大战&#xff0c;前几年新能源大战&#xff0c;今年资本割完韭菜后留…

java面向对象编程基础

对象&#xff1a; java程序中的对象&#xff1a; 本质上是一种特殊的数据结构 对象是由类new出来的&#xff0c;有了类就可以创建对象 对象在计算机的执行原理&#xff1a; student s1new student();每次new student(),就是在堆内存中开辟一块内存区域代表一个学生对象s1变…