类与对象笔记-Java-第一部分

基本格式

class 类名{

        类体

}

类的声明

class People{

}

class 植物{

}

类体

class Ladder{float above;float bottom;float height;float area;float computer(){area=(above+bottom)*height/2.0f;return area;}void setHeight(float h){height=h;}
}

成员变量

成员变量可以是Java中任何一种数据类型

成员变量的默认值

逻辑型数据默认是flase, 整数类型数据默认值是0,字符类型默认值是NULL,浮点类型默认值是0.0f

成员变量的有效范围

在整个类的所有的方法里都有效,其有效与它在类体中出现的位置无关

上述Ladder类等效于

class Ladder{float above;float bottom;float area;float computer(){area=(above+bottom)*height/2.0f;return area;}float height;void setHeight(float h){height=h;}
}

方法

一般格式

方法头{

        方法体内容

}

方法头

 int speak() //无参{return 23;}int add(int x,int y,int z)//有参{return x+y+z;}

注:当一个方法是void类型,该方法不需要返回值

方法体

在方法体中声明的变量和方法的参数被称为局部变量

局部变量只在方法内有效  

如果局部变量是在循环语句中,那么该局部变量的有效范围是在该循环语句内

区分局部变量和成员变量

如果局部变量和成员变量的名字相同,那么成员变量被隐藏,即该成员变量在这个方法内暂时失效

class temple1 {int x=10,y;void f(){int x=5;y=x+x;//y=10}
}

如果想在该方法中使用被隐藏的成员变量,必须使用关键字this

class temple2 {int x=10,y;
void f(){int x=5;y=x+this.x;//y=15
}
}

注:局部变量没有默认值

构造方法

构造方法的名字必须与所在的类的名字完全相同,而且没有类型

一个类中可以有多个构造方法但必须保证他们的参数不同(个数,类型不同)

构造方法的主要作用是初始化对象的状态,即设置对象在开始时应具有的值和状态。这是确保对象在被使用之前已经准备好其必要的数据和资源的关键步骤。

注:如果没有编写构造方法,系统会默认该类只有一个构造方法,该默认构造方法是无参的,且方法体中没有语句。例:

Ladder(){
}

自定义构造方法

class Point{int x,y;Point(){x=1;y=1;}Point(int a,int b){x=a;y=b;}
}

创建对象

对象的声明

类的名字  对象的名字;

例如:

Ladder ladder

为声明的对象分配变量

class Point {int x, y;Point(int a, int b) {x = a;y = b;}
}public class Example {public static void main(String[] args) {Point p1 = new Point(10, 20);Point p2 = new Point(23, 25);// 现在 p1 和 p2 都已经被正确实例化和初始化}
}

注:new运算符在为成员变量分配内存后,将计算出一个称作引用的值(该值包括着这些成员变量内存位置及相关的重要信息)即表达式new xiyoujiRenwu()是一个值,如果把引用赋值给zhubajie

zhubajie=new xiyoujiRenwu();

创建多个不同对象

一个类通过new运算符可以创建多个不同对象,这些对象的变量将被分配到不同放到不同的内存空间

zhubajie = new XIyoujiREnwu();
sunwukong = new XiyoujiRenwu();

注:new标识符只能和类的构造方法进行计算,运算的最后结果是一个16进制的数

使用对象

1、对象操作自己的变量

对象通过使用点访问符"."访问自己的变量,访问格式为:

对象.变量;

2、对象调用类中的方法

调用格式:

对象.方法;

例子:

class Xiyoujirenwu{float height,weight;String head,ear;void speak(String s){head="歪着头";System.out.println(s);}
}
public class test1 {public static void main(String []args){Xiyoujirenwu zhubajie;//声明变量zhubajie=new Xiyoujirenwu();zhubajie.height=1.8f;zhubajie.weight=1.62f;zhubajie.head="大头";zhubajie.ear="一双大耳朵";System.out.println("猪八戒的头为:"+zhubajie.head);//大头System.out.println("猪八戒的身高为:"+zhubajie.height);System.out.println("猪八戒的体重为:"+zhubajie.weight);zhubajie.speak("俺老朱想娶媳妇");System.out.println("猪八戒的头为:"+zhubajie.head);//歪着头}
}

对象的引用和实体

分配给对象的变量被习惯地称作对象的实体

1、避免使用空对象

2、重要结论

一个类声明的两个对象如果具有相同的引用,两者就具有完全相同的变量(实体)

在JAVA中,对于同一个类的两个对象object1和object2,允许进行如下操作:
object1=object2;

3、垃圾收集

一个类声明的两个对象如果具有相同的引用,两者就具有完全相同的实体,Java有垃圾收集机制,这种机制周期性的检测某个实体是否不在被任何对象引用,假如程序中运行了如下的赋值语句:p1=p2;,(他们的本质是一样的),在系统看来他们的名字是一样的 

例子:

class Point{int x,y;void setXY(int m,int n){x=m;n=y;}
}
public class test1 {public static void main(String []args){Point p1=null;p1=new Point();System.out.println("p1的引用:"+p1);p1.setXY(111,222);System.out.println("p1的x,y的值为:"+p1.x+p1.y);}
}

 参数传值

参数属于局部变量。方法被调用时,参数变量必须有具体的值

基本数据类型参数的传值

参数传递的值的级别不可以高于该参数的级别;例如:不可以向int型参数传递一个float值,但是可以向double型参数传递一个float级别

例子:


class Computer{int add(int x,int y){return x+y;}
}public class test1 {public static void main(String []args){Computer com =new Computer();int m=100;int n=200;int result =com.add(m,n);System.out.println("m+n=:"+result);}
}

引用类型参数的传值

Java的引用型数据包括数组,对象,接口

注:当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体

可变参数

在声明方法时不给出参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数使用“...”表示若干个参数

例如:

public void f(int ...x)

再如:

public void g(double a,int...x)

注:

public void method(int ...x,int y)//wrong

可变参数x代表的最后一个参数不是method方法的最后一个参数

参数代表可以通过下标运算来表示参数列表中的具体参数,即x[0]、x[1]、...、x[m-1]分别表示x代表的第1~m个参数。

例子:计算个数经常变化,又无规律可循

public int GetSum(int...x){int sum=0;for (int i=0;i<x.length;i++){sum=sum+x[i];}return sum;}

用for 循环遍历可变参数

for(声明循环变量:参数代表){

        ...

}

例:

for(int param:x){sum=sum+param;
}

若有侵权,请联系作者

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

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

相关文章

mysql数据库表的数据显示到前端tableView

首先我们在ui视图设计中引入TableView, 定义一个model QSqlQueryModel *modelnew QSqlQueryModel(ui->tableView);model->setQuery(query);//将查询结果绑定到模型上ui->tableView->setModel(model); 将tableView内容设置成model然后就可以出现数据库的数据。示…

c++ 拷贝构造函数 简单实验

1.概要 什么时候调用拷贝构造&#xff0c;就是有对象创建的时候&#xff0c;就会调用拷贝构造&#xff0c;无论对象是构造&#xff08;类&#xff08;来源&#xff09;&#xff09;还是赋值&#xff08;对象&#xff09;都会调用拷贝构造。 赋值函数调用的时机是两个对象都已经…

2.8 构建gradle环境

构建gradle环境 目录一、安装Java Development Kit (JDK)二、下载Gradle三、解压Gradle四、配置环境变量五、验证安装六、gradle构建java项目七、eclipse配置gradle 目录 一、安装Java Development Kit (JDK) Gradle是基于Java开发的&#xff0c;所以首先需要安装JDK。你可以从…

春秋云境:CVE-2022-32991[漏洞复现]

从CVE官网查询该漏洞相关信息 该漏洞是由于welcome.php中的eid参数包含了SQL注入漏洞 则我们的目标就在于寻找welcome.php地址以及相关的可注入eid参数 开启靶机 先在页面正常注册、登录一个账号。密码随便填 进入了home目录&#xff0c;这里有三个话题可以选择开启 随便选…

【服务器部署篇】Linux下Nginx的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

使用 draw.io(现在称为 diagrams.net)进行图表设计和绘图

使用 draw.io&#xff08;现在称为 diagrams.net&#xff09;进行图表设计和绘图的体验通常是积极和高效的。以下是一些用户的使用心得&#xff0c;根据您提供的搜索结果进行总结&#xff1a; 界面简洁直观&#xff1a;draw.io 的用户界面设计简洁&#xff0c;使得新用户能够快…

【MySQL】20. 使用C语言链接

mysql connect mysql的基础&#xff0c;我们之前已经学过&#xff0c;后面我们只关心使用 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作&#xff1a; …

从零构建生产级 AI 应用 ChatWithPDF

前言 目前 AIGC 的浪潮很火&#xff0c;不管你是什么方向的程序员&#xff0c;都可以通过大模型去构建自己的 App&#xff0c;但是搜索资料学习的时候发现&#xff1a; 目前构建 AI 应用的中文资源比较少&#xff0c;大多数都是英文的。教程大多是 demo 级别&#xff0c;没有…

claude3会员版怎么在国内充值

由于国内尚未正式开放注册&#xff0c;许多用户可能感到有些不便。但在这个时代&#xff0c;如果没有几个得心应手的AI工具链接&#xff0c;似乎都与时代脱节了。今天推荐一个非常实用的Claude3镜像站点&#xff1a; https://hiclaude3.cn 这个站点不仅拥有简洁明了的对话操作…

数据库第五次作业官方答案

说明 之前的互评结束之后就无法查看答案&#xff0c;所以想着互评期间把答案保存下来&#xff0c;方便之后进行复习 # 1.1 select ID, name,sec_id from instructor natural left outer join teaches&#xff1b;# 1.2 select ID,name, count(sec_id) as Numberofsetions fro…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展&#xff0c;车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中&#xff0c;大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网&#xff0c;以实现智慧出行的目标。 尤其是近来国内的华为…

JavaSE备忘录(未完)

文章目录 基本数据类型println 小知识除法( / ) 和 Infinity(无穷) 小知识除法InfinityInfinity 在除法中正负判断 求余(%) 小知识 基本数据类型 除 int、char 的包装类分别为 Integer、Character 外&#xff0c;其余基本数据类型的第一个字母大写就是它的包装类。 println 小…

spingboot3项目创建入门体验

spingboot3流程体验 项目简易打包部署 Spring Initializr 创建向导 spingboot3流程体验 先在IDEA创建一个新的空项目 然后在项目中创建一个模块 在pom.xml文件中添加maven配置继承spingboot3父项目和web开发场景启动器 创建启动springboot项目的主入口程序文件 import org.sp…

初识C++ · 类和对象(中)(1)

目录 1 类的6个默认成员函数 2 构造函数 3 析构函数 3 拷贝构造函数 1 类的6个默认成员函数 class Date { public:private:}; 这是一个空类&#xff0c;试问里面有什么&#xff1f; 可能你会觉得奇怪&#xff0c;明明是一个空类&#xff0c;却问里面有什么。其实一点也不…

数据融合概念解析:特征融合与特征交互

特征融合与特征交互的区别 我是目录 特征融合与特征交互的区别前言三者关系三者定义特性融合(Feature Fusion):特征拼接(Feature Concatenation):特征交互(Feature Interaction): 特征融合和特征交互关键的不同点数据处理目的应用 总结 前言 遥感系列第14篇。遥感图像处理方向…

js解密心得,记录一次抓包vue解密过程

背景 有个抓包结果被加密了 1、寻找入口&#xff0c;打断点 先正常请求一次&#xff0c;找到需要的请求接口。 寻找入口&#xff0c;需要重点关注几个关键字&#xff1a;new Promise 、new XMLHttpRequest、onreadystatechange、.interceptors.response.use、.interceptors.r…

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…

PMM2 MySQL监控管理工具

目录 1. PMM介绍 2. 安装PMM服务端 2.1 安装docker 2.1.1 下载docker 2.1.2 上传docker包 2.1.3 启动守护进程 2.1.4 查看docker状态 2.2 安装PMM 2.2.1 下载镜像 2.2.2 load镜像 2.2.3 查看镜像 2.2.4 创建容器 2.2.5 运行镜像 2.2.6 验证PMM服务器 2.2.7 删除…

外包干了16天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

【剪映专业版】09定格、倒放、镜像、旋转、裁剪

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 分别为定格、倒放、镜像、旋转、裁剪 定格 时间指示器移动到需要定格的地方&#xff0c;点击定格&#xff0c;自动生成一张图片&#xff0c;时长为3秒。 定格出来的画面&#xff0c;可以任意调整长短时间。 如果需要导…