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);//null
        System.out.println(c.color);//null
        System.out.println(c.price);//0
        System.out.println(" ");

        c.brand="huawei";//华为
        c.color="black";//黑色
        c.price=6999;//6999
        System.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;//6999
        System.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;//6999
        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=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;//6999
        System.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.mfbz.cn/a/594921.html

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

相关文章

既能自动仿写公众号爆文,还能批量帮你上架闲鱼商品,打造自己的数字员工,简直yyds

「想象一下,如果有一个机器人在你的计算机上24小时不间断地工作,会不会做梦都笑着」 一、RPA机器人是什么? RPA——机器人流程自动化,它可以帮助人们完成重复性的、繁琐的工作,比如数据输入、网页爬取、自动化流程等…

The 2024 International Collegiate Programming Contest in Hubei Province, China

目录 H. Genshin Impact Startup Forbidden III K. Points on the Number Axis B 估计还会补D,I H. Genshin Impact Startup Forbidden III 对于一个有鱼的池塘,有周围与自己本身五个关键位置可以捕获当前位位置的鱼。把这些位置存储到 map中。用四进制…

2023 年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷 B(容器云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

【011】网上鲜花商店(SSM+JSP)

【011】网上鲜花商店(SSMJSP) 一、系统情况介绍 网上鲜花商店分为前台端和后台端,是致力于可以便捷购花而开发的一套系统,可以按照不同种类进行分类管理,清晰客观的展示鲜花的详情信息以及价格等等,适合新手学习开发…

Redis(基础指令和五大数据类型)

文章目录 1.基本介绍1.多种数据结构支持2.应用场景 2.Redis安装(直接安装到云服务器)1.安装gcc1.yum安装gcc2.查看gcc版本 2.将redis6.2.6上传到/opt目录下3.进入/opt目录下然后解压4.进入 redis-6.2.6目录5.编译并安装6.进入 /usr/local/bin 查看是否有…

多域名证书一个域名50元

多域名SSL数字证书是一种特殊的域名SSL证书,它可以同时保护多个不同的独立域名,对于域名网站比较多的个人和企事业开发者来说,为每个网站购买不同的SSL证书是一项不小的开销。因此,CA认证机构推出了两种SSL证书——通配符SSL证书和…

内网使用有道云翻译(安装离线包,支持翻译长句)

当我们使用有道云翻译时,为了在没网的情况下也能准确进行翻译,我们需要下载一些离线包增强翻译效果,但是我们在内网进行有道云安装时,他只提供了一个有道云的exe安装,并没有提供离线包的安装,我们这里实现在…

vue快速入门(五十五)插槽基本用法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 当传输内容只有一种时的基础写法 源码 App.vue <template><div id"app"><h1>被淡化的背景内容</h1><my-dialog><!-- 插槽内容:文字以及dom结构都可以传 --><span>你确…

分布式锁与秒杀

分布式锁与秒杀 1. 分布式锁1.1 常用Redis分布式锁方案三&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令) 秒杀 1. 分布式锁 https://www.cnblogs.com/shoshana-kong/p/17519673.html 1.1 常用Redis分布式锁方案三&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令) …

Gradio的Dataframe数据显示不全,例如只能显示前15行数据

Gradio的Dataframe数据显示不全&#xff0c;例如只能显示前15行数据 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ Windows10 教育版64位 Python 3.10.6 Chrome 版本…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示&#xff1a;本系列将会开始RFC文档阅读&#xff0c;这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议&#xff0c;我们都知道&#xff0c;在传统的OSI七层或者是现在被简化的五层&#xff1a;应用层&…

绘唐3工具怎么成为团长阿

绘唐3怎么成为团长阿 这里https://qvfbz6lhqnd.feishu.cn/wiki/D3YLwmIzmivZ7BkDij6coVcbn7W

统一大型语言模型和知识图谱:路线图

【摘要】 大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和GPT4&#xff0c;由于其涌现能力和泛化性&#xff0c;正在自然语言处理和人工智能领域掀起新的浪潮。然而&#xff0c;LLM是黑箱模型&#xff0c;通常无法捕捉和获取事实知识。相反&#xff0c;知识图…

图片如何转换成jpg?分享三种简单方法

在日常生活中&#xff0c;我们经常需要将照片转换为JPG格式以便于分享或者上传&#xff0c;然而&#xff0c;小伙伴不知道的是不同的设备和软件可能会有不同的默认保存格式。如果你发现你的照片不是jpg格式&#xff0c;那么如何将图片如何转换成jpg呢? 如果您有其他格式的图片…

Windows 系统使用Jenkins 实现CI一键打包部署操作

一 下载安装jenkins jenkins 中文官网链接: 下载地址 点击下载&#xff0c;完成后是一个.msi后缀的安装文件&#xff0c;双击安装 安装和普通软件一样&#xff0c;一路next&#xff0c;安装路径自己设置一下&#xff0c;默认是C盘&#xff0c;我C盘不够用了&#xff0c;设置…

【C++基础】this指针

一&#xff0c;this指针引入 不同对象调用相同函数时 &#xff0c;打印出来的值不一样&#xff0c;为什么&#xff1f; 这就隐含了一个this指针。this指针又叫隐含的this指针。&#xff08;不能显示写&#xff0c;但能显示用&#xff09; 注&#xff1a;1&#xff0c;红色部…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

《Fundamentals of Power Electronics》——一些常用变换器的正则电路参数值

对于理想的CCM PWM dc-dc转换器&#xff0c;其包含一个电感和电容&#xff0c;正则模型有效的低通滤波器需要包含一个电感和一个电容。正则模型简化为如下图所示。 假设电容与负载直接相连。基础的buck、boost和buck-boost转换器的参数值如下表所示。 该模型可以用传统的线性电…

Leetcode—1652. 拆炸弹【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—1652. 拆炸弹 实现代码 class Solution { public:vector<int> decrypt(vector<int>& code, int k) {int codeSize code.size();vector<int> ans(codeSize, 0);if(k 0) {return ans;}if(k > 0)…

【Linux】命令行参数和环境变量

目录 一、命令行参数 1.1 main函数的参数 1.2 命令行参数 二、环境变量 2.1 概念 2.2 查看和设置环境变量 2.2.1 查看环境变量 2.2.2 设置环境变量 2.2.3 设置PATH环境变量 2.2.4 环境变量表 2.2.5 本地变量和环境变量的区别 2.2.6 内建命令和常规命令 2.3 环境变…
最新文章