Java---类和方法的再研究

        上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充;


        一:类与对象
 

(1)类

一些相同属性和行为的事物的统称,比较广泛、抽象,比如人类,动物类,鸟类;

含有属性和行为(可以有其中一个,也可以都有),属性一般用来描述对象的特征,行为用来描述对象可以干什么。

比如动物类中有一个对象:狗;        属性:狗有名字,体重;        行为:狗会吃饭,睡觉;

在Java中,先有类再有对象的;

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)}

(2)属性:(成员变量)

属性:狗有名字,体重;    

  权限修饰符 数据类型 变量名(一般不对变量名赋值,毕竟对象的属性一般不相同);

如:public String name ;  // 名字属性

后面我们再说说 权限修饰符 的事情;

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)public String name;public int weight;}

(3)  行为:(成员方法)

行为:狗会吃饭,睡觉;

我们先了解基本的行为的创建:权限修饰符  返回值类型 方法名

无返回值类型无形参列表:

      public void eat ( ) {

        System.out.println( " 爱吃骨头头 " ) ;

}

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)public String name;public int weight;//成员方法(行为)public void eat(){System.out.println("爱吃骨头头");}public void sleep(){System.out.println("睡觉睡得死");}
}

 

(4)对象:

类的具体表现,用于调用类的 属性 和 行为 ;

对象的创建:类名  对象名 = new 类名();

如:ClassAnimal dog = new ClassAnimal ( ) ;

可以仿照 Scanner 的用法,毕竟都是引用类型 : Scanner scn = new Scanner ( ) ; 

如果类与对象不在同一包下,第一步需要导包:import  包名 . 类名

public class dog {public static void main(String[] args) {ClassAnimal dog=new ClassAnimal();}
}

对象调用类的属性和方法:对象名 .

public class dog {public static void main(String[] args) {ClassAnimal dog=new ClassAnimal();dog.name="大黄";dog.weight=50;dog.eat();dog.sleep();System.out.println(dog.name+"\t"+dog.weight);}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=13016:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo dog
爱吃骨头头
睡觉睡得死
大黄	50进程已结束,退出代码0

(5)注意事项

类的 属性 和 行为 在 main 方法外创建 ;

成员变量有默认值,规则与数组相同;

 

二:案例演示

        定义一个手机类,有 颜色,品牌,价格的属性,有打电话,发消息的行为,创建对象并调用;

 如下,为定义的手机类:

public class ClassPhone {//成员变量:颜色,品牌,价格public String color;public String brand;public int price;//成员方法:打电话,发消息public void call(String who){System.out.println("给"+who+"打电话");}public void message( ){System.out.println("总爱发消息!");}
}

         如下,为创建的类的对象,并进行调用;可以看出,成员变量的默认值符合数据类型的默认值的规则;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();System.out.println(c.brand);//nullSystem.out.println(c.color);//nullSystem.out.println(c.price);//0System.out.println(" ");c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();}
}

 (2)两个对象使用同一个类;

两个对象互不干扰;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();System.out.println(" ");//再次创建对象ClassPhone c1=new ClassPhone();c1.brand="小米";//华为c1.color="blue";//黑色c1.price=5999;//6999System.out.println(c1.brand);System.out.println(c1.price);System.out.println(c1.color);c1.call("曹操");c1.message();}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6083:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
huawei
6999
black
给刘备备打电话
总爱发消息!小米
5999
blue
给曹操打电话
总爱发消息!进程已结束,退出代码0

 (3)两个引用指向同一个对象

将 c 的地址赋给 c1,因此 c1 根据地址找到 c 的属性;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();System.out.println(" ");//再次创建对象ClassPhone c1=c;System.out.println(c1.brand);System.out.println(c1.price);System.out.println(c1.color);c1.call("曹操");c1.message();}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6228:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
huawei
6999
black
给刘备备打电话
总爱发消息!huawei
6999
black
给曹操打电话
总爱发消息!进程已结束,退出代码0

三:使用对象作为方法的参数

当一个对象作为形参传递给方法时,传递的是对象的地址;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999//调用方法method(c);}public  static void method(ClassPhone c){System.out.println(c.brand);System.out.println(c.color);System.out.println(c.price);c.message();}
}

四:使用对象作为方法的返回值类型

public class phone {public static void main(String [] args){//赋值调用ClassPhone cc=method();System.out.println(cc.price);//调用System.out.println(cc.brand);//调用System.out.println(cc.color);//调用cc.call("刘备");         //调用方法cc.message();                //调用方法}//方法的返回值类型为 对象public  static ClassPhone method( ){//创建对象ClassPhone c=new ClassPhone();c.brand="小米";c.price=3999;c.color="红色";return c;}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=8352:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
3999
小米
红色
给刘备打电话
总爱发消息!进程已结束,退出代码0

 

五:局部变量与成员变量

(1)位置不同:

成员变量定义在 main 方法中 ,局部变量定义在方法中;

public class Extend {public static void main(String[] args) {String name;//全局变量}public void method(){int a=20;//局部变量//System.out.println(a);}
}

(2)作用域不同:

成员变量在整个类中都可以使用,局部变量只能在该方法内使用;

public class Extend {public static void main(String[] args) {int age=100;//全局变量System.out.println(age);method();//无法调用}public void method(){int a=20;//局部变量System.out.println(a);}
}

(3)默认值不同

局部变量在栈内存中,无默认值,必须赋值才能使用;

成员变量在堆内存中,默认值的规则与数组相同;

(4)生命周期不同

局部变量随方法的入栈而创建,随方法的出栈而消失;

成员变量随随对象的创建而产生,随着对象被垃圾回收而消失;

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

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

相关文章

专项技能训练五《云计算网络技术与应用》实训7-1:安装mininet

文章目录 mininet安装1. 按6-1教程安装opendaylight控制器。2. 按6-2教程安装RYU控制器。3. 按5-1教程安装openvswitch虚拟交换机并开启服务。4. 将老师所给mininet安装包试用winSCP传送至电脑端。5. 安装net-tools。6. 安装mininet7. 安装完成后,使用命令建立拓扑&…

C#基础之选择排序

选择排序 文章目录 选择排序1、概念2、代码实现 1、概念 1、新建一个下标 int index 0; 2、依次比较 3、找出极值 arr[index] < arr[n] 4、放入目标 //数组长度-1-n轮从第0轮开始 5、比较n轮2、代码实现 int[] arr new int[]{8,7,1,5,4,2,6,3,9}; 第一步 声明索引0&…

Python实战开发及案例分析(7)—— 排序算法

排序算法是计算机科学中的基础&#xff0c;用于将数据元素按照特定的顺序排列。Python 提供了多种方式来实现排序算法&#xff0c;包括内置的排序函数和手动实现各种经典排序算法。 Python 内置排序函数 Python 的内置函数 sorted() 和列表的 sort() 方法提供了高效的排序功能…

什么?你用service调controller,那参数校验怎么办?

你好&#xff0c;我是柳岸花开。 你有没有遇到过用service调controller的场景&#xff1f;我司公有云用的微服务架构&#xff0c;私有云则用的合并完的微服务架构——一个单体&#xff0c;这就涉及到用service调controller&#xff0c;这个明显的问题是参数校验会失效&#xff…

【网络安全产品】---应用防火墙(WAF)

what Web应用防火墙&#xff08;Web Application Firewall) WAF可对网站或者App的业务流量进行恶意特征识别及防护&#xff0c;在对流量清洗和过滤后&#xff0c;将正常、安全的流量返回给服务器&#xff0c;避免网站服务器被恶意入侵导致性能异常等问题&#xff0c;从而保障…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django&#xff1a;核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章&#xff1a;Django简介 背景和发展历程&#xff1a; Djan…

计算机毕业设计springboot基于vue电商抢购限时秒杀系统ch0h8

技术栈 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 数据库: mysql5.7以上版本 可选框架&#xff1a;ssmspringboot都有的 前端&#xff1a;vue.jsElementUI 详细技术&#xff1a;springbootSSMvueMYSQLMAVEN 数据库工具&#xff1a;Navicat/SQLyog都可以 开发工具 Ec…

CMakeLists.txt语法规则:部分常用命令说明四

一. 简介 前面几篇文章学习了CMakeLists.txt语法中前面几篇文章学习了CMakeLists.txt语法中部分常用命令。文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;部分常用命令说明一-CSDN博客 CMakeLists.txt语法规则&#xff1a;部分常用命令说明二-CSDN博客 CMakeLi…

【算法设计与分析】六、动态规划:(二)上机-1、地牢逃生【理论到程序】

文章目录 一、题目1、问题2、输入输出要求3、样例说明4、数据范围 二、思路1、GPT4 - fail算法解释C 实现 2、Claude3 - fail问题分析算法实现 3、个人拙见 - succeed 三、代码实现 一、题目 1、问题 用一个 nn 的矩阵表示一座地牢&#xff0c;矩阵中第 i 行第 j 列的方格的值…

力扣每日一题106:从中序与后序遍历序列构造二叉树

题目 中等 相关标签 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postorder …

OpenCV(五) —— 人脸识别模型训练与 Windows 下的人脸识别

本文主要内容&#xff1a; 如何训练 OpenCV 的人脸识别模型如何在 Windows 下利用 OpenCV 进行人脸识别 1、概述 人脸识别需要人脸模型&#xff08;特征集合&#xff09;的支持&#xff0c;人脸定位的速度与准确度取决于模型。 OpenCV 提供了已经训练好的模型&#xff0c;无…

KAN网络认识

首先&#xff0c;这是一个基于柯尔莫哥洛夫-阿诺德表示定理的网络。这个定理指出如果函数f是定义在有界域上的多变量连续函数&#xff08;即最终要拟合的非线性函数是连续的&#xff09;&#xff0c;那么该函数就可以表示为多个单变量、加法连续函数的有线组合。 对于机器学习…

大数据BI可视化(Echarts组件)项目开发-熟悉交互API5.0

全局echarts对象 init初始化 registerTheme注册主题 var mCharts echarts.init(document.querySelector("div"), itcast)registerMap地图图表 connect 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

程序员副业项目开发支付解决方案

个人支付解决方案 让我们跳过开发环节&#xff0c;来谈谈如何变现。大部分支付方案都是为企业设计的&#xff0c;面向个人的正规支付方案相对较少。那么&#xff0c;对于那些没有注册公司的个人来说&#xff0c;怎样才能更安全地收款呢&#xff1f; 常见的几种个人收款方式 个…

OpenCV(六) —— Android 下的人脸识别

本篇我们来介绍在 Android 下如何实现人脸识别。 上一篇我们介绍了如何在 Windows 下通过 OpenCV 实现人脸识别&#xff0c;实际上&#xff0c;在 Android 下的实现的核心原理是非常相似的&#xff0c;因为 OpenCV 部分的代码改动不大&#xff0c;绝大部分代码可以直接移植到 …

ubuntu安装LVGL/lv_img_conv并在thinkphp中进行调用生成bin文件

项目需求&#xff1a;需要处理图片成为bin文件&#xff0c;并以二进制的方式传给蓝牙设备&#xff0c;当前仅介绍如何安装&#xff0c;对lvgl功能和简介不做过多描述 项目库地址&#xff1a;https://github.com/lvgl/lv_img_conv 安装过程比较简单 一&#xff0c;确保node.j…

mall-cook本地部署运行

下载源代码 https://github.com/wangyuan389/mall-cook 下载好之后解压&#xff0c;删除.github和yarn.lock&#xff0c;因为使用pnpm 启动文档部署 切换到packages\mall-cook-document&#xff0c;删除yarn.lock&#xff0c;安装依赖包pnpm install 执行pnpm dev启动文档…

C语言/数据结构——(用双链表实现数据的增删查改)

一.前言 嗨嗨嗨&#xff0c;大家好久不见&#xff01;前面我们已经通过数组实现数据的增删查改、单链表实现数据的增删查改&#xff0c;现在让我们尝试一下使用双链表实现数据的增删查改吧&#xff01; 二.正文 如同往常一样&#xff0c;对于稍微大点的项目来说&#xff0c;…

TCP与UDP协议:你应该知道的传输层协议

第一部分&#xff1a;引言与协议概述 在互联网通信的宏伟架构中&#xff0c;传输控制协议(TCP, Transmission Control Protocol)与用户数据报协议(UDP, User Datagram Protocol)如同两颗璀璨的星辰&#xff0c;各自扮演着不可或缺的角色。它们作为传输层的两大支柱&#xff0c…

推荐网站(2)今日热榜合集,看不同软件的热点事件

当我们想要看微博&#xff0c;今日头条&#xff0c;bilibili等等今日热点时&#xff0c;需要打开对应的app查看&#xff0c;但是有了这个网站我们可以看不同平台的热点消息&#xff0c;甚至京东&#xff0c;淘宝等购物软件&#xff0c;也能看到热销总榜。 链接直达&#xff1a;…