Java基础第十一课——类与对象(2)

news2024/12/23 17:21:14

由于类与对象这一部分的知识点很多,而且操作方法也有很多,所以这次将继续深入讨论一下关于类与对象中方法传参、方法重载、构造方法以及this关键字使用方面的知识。

一、方法传参

1.return关键字

return关键字作用

作用场景:方法内

作用:

1)结束方法,返回到方法调用处

2)结束方法并返回一个结果给方法调用者

注意:return在方法内结束后续操作的作用与break在循环结构中的作用表现一致

package com.kgc.se.demo01;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 8:49
 * QQ:1512015112
 * VX:18056394367
 */


public class ReturnDemo01 {

  
    public static void m1(int num){
        //在输出结果之前,判断你传递进来的参数num是否大于50,如果大于50,就给计算机一个提示,不输出这个结果,结束方法后续代码的执行

        if(num>50){
            return;
        }



        System.out.println(num);
    }

    public static void m2(int num){
        if (num<1){
            return;
        }
        for (int i=1;i<=num;i++ ){
            //输出i的值,如果i的值为5,就结束方法的执行
            if (i==5){
                return;
            }
            System.out.println(i);
        }
    }



}
package com.kgc.se.demo01;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 8:51
 * QQ:1512015112
 * VX:18056394367
 */


public class ReturnDemo01Test {
    public static void main(String[] args) {
        ReturnDemo01.m1(100);

        System.out.println("方法调用完毕");

        ReturnDemo01.m2(10);
    }
}

2.数组方面的应用

前言:3大引用数据类型:数组、类、接口

类:是一种自己定义的数据类型,类是一个模板,模板中定义了属性和方法,通过这个模板创建出来的对象都会拥有这个类中定义的属性和方法

根据类创建的对象中可以存储各种属性值,对象就可以看成是一个容器,这个容器就可以存储不同类型的数据(属性的数据类型是不同)

类是一种数据类型,根据类创建出来的多个对象,可以存储在数组中

语法:数据类型[] 数组名={数据1,数据2,……,数据n};

例:

package com.kgc.se.demo02;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 9:01
 * QQ:1512015112
 * VX:18056394367
 */


public class ObjectArray01 {
   
    public static void main(String[] args) {
        //创建3个Student类对象
        Student student1 = new Student();
        student1.name="张三";
        student1.age=20;
        student1.gender='男';
        Student student2 = new Student();
        student2.name="李四";
        student2.age=22;
        student2.gender='男';
        Student student3 = new Student();
        student3.name="小芳";
        student3.age=18;
        student3.gender='女';



        //将上面3个Student类对象存储到数组中
        Student[] students ={student1,student2,student3};

        //遍历输出student数组中的所有元素
        for (int i = 0; i < students.length; i++) {
            //从students数组里取出的元素是一个一个的Student类对象,既然是对象,就可以调用属性、调用方法

            System.out.print(students[i].name+"-");
            System.out.print(students[i].age+"-");
            System.out.print(students[i].gender+"\n");

            //上面输出取出来的对象的信息,是一个属性一个属性去调用的,也可以直接通过对象来输出所有属性值

            System.out.println("***************************");
            for (Student stu:students){
                stu.showInfo();
            }

            System.out.println("***************************");
            students[i].showInfo();
            System.out.println("***************************");


        }
    }



}
package com.kgc.se.demo02;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 9:04
 * QQ:1512015112
 * VX:18056394367
 */


public class Student {
    public String name;
    public  int age;
    public  char gender;

    public void showInfo(){
        System.out.println(name+"-"+age+"-"+gender);
    }
}

例:

package com.kgc.se.demo02;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 9:49
 * QQ:1512015112
 * VX:18056394367
 */


public class StudentUtilsTest {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name="张三";
        student1.age=20;
        student1.gender='男';
        Student student2 = new Student();
        student2.name="李四";
        student2.age=22;
        student2.gender='男';
        Student student3 = new Student();
        student3.name="小芳";
        student3.age=18;
        student3.gender='女';
        Student student4 = new Student();
        student4.name="小红";
        student4.age=16;
        student4.gender='女';
        Student student5 = new Student();
        student5.name="王五";
        student5.age=22;
        student5.gender='男';
        Student student6 = new Student();
        student6.name="张港澳";
        student6.age=23;
        student6.gender='女';
        Student student7 = new Student();
        student7.name="张富康";
        student7.age=22;
        student7.gender='女';

        Student[] students1={student1,student2,student3,student4,student5,student6,student7,};

        //查找students1数组中0-6范围内是否有张三这个学生
        boolean  result= StudentUtils.findStudentName(students1,0,6,"张三");
        System.out.println("你要查找的数组的指定区间里有你要查找的学生姓名: " + result);

    }
}
package com.kgc.se.demo02;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 9:41
 * QQ:1512015112
 * VX:18056394367
 */


public class StudentUtils {


    //定义一个静态方法,实现在Student类型的数组中,查找指定区间内是否有指定的学生姓名,如果有,返回true,没有则返回false

    public static boolean findStudentName(Student[] students,int startIndex,int endIndex,String name){
        //遍历students数组的指定区间,从这个区间中查找是否有姓名为name的学生
        for (int i = startIndex;i<=endIndex;i++){
            //比较范围内的Student对象姓名和你要查找的学生姓名
            if (name.equals(students[i].name)){
                return true;
            }

        }
        return false;

    }



}

二、方法重载

方法重载:

在一个类中,多个方法的方法名相同,参数列表不同的现象,就是方法重载

方法重载的要求:

1)在同一个类中

2)方法名相同

3)参数列表不同(参数的类型不同,参数的个数不同,参数的顺序不同)

4)与方法的返回值类型无关

5)与方法的访问权限修饰符无关

public class Calc {
    //这是一个计算器类,类中有多个方法实现加法运算

    //定义一个求两个int类型数据之和的方法
    public  int sum(int num1,int num2){
        return num1+num2;
    }

    //定义一个求三个int数据之和的方法
    public  int sum2(int num1,int num2,int num3){
        return num1+num2+num3;
    }

    //定义一个求两个double类型数据之和的方法
    public double sum(double sum1,double sum2){
        return sum1+sum2;
    }


    //定义一个int类型数据和一个double类型数据之和的方法
    public double sum(int num1,double num2){
        return num1+num2;
    }

    //定义一个求double类型数据和一个int类型数据之和的方法
    public double sum(double num1,int num2){
        return num1+num2;
    }



}

三、构造方法

构造方法:

作用:用来创建对象的

构造方法的特点:

1)构造方法名与类名相同

2)构造方法没有返回值,void也不写

3)当你定义好一个类的时候,系统自动为这个类添加一个无参的构造方法,并且隐藏起来了

4)当你在类中添加了其它构造方法后,会覆盖系统默认添加的无参构造方法,如果这时候你需要使用无参构造方法,你就需要手动添加一个无参构造方法,否则会报错

5)当一个类中有多个构造方法时,会构成方法重载现象

例:

package com.kgc.se.demo05;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 11:05
 * QQ:1512015112
 * VX:18056394367
 */


public class Test {

    public static void main(String[] args) {


        //创建一个int类型变量并输出
        int a = 100;
        System.out.println("a="+a);//a=100
        //创建一个Student类对象并赋值age为20

        //类名 对象名= new 类名();
        Student stu = new Student();
        stu.age = 10;
        System.out.println("stu的年龄:"+stu.age);//stu的年龄:10


        //创建Demo类对象,调用Demo类中的两个方法
        Demo demo = new Demo();
        //调用m1()方法
        demo.m1(a);//m1()方法中对传递过来的值进行操作后,值为:101

        System.out.println("a="+a);//a=100

        System.out.println("---------------");

        demo.m2(stu);
        System.out.println("stu的年龄:"+stu.age);//stu的年龄:11

        int[] nums = {11,22,33};
        System.out.println(nums);
        System.out.println(stu);

        System.out.println("-----------------------");

        //使用Student类中的有参构造方法创建对象
        Student student = new Student(20);
        System.out.println(student.age);





    }
}

package com.kgc.se.demo05;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 11:05
 * QQ:1512015112
 * VX:18056394367
 */

public class Student {

    
    public Student(){}

    public Student(int a){
        age =a;
    }

    public int age;
}

四、this关键字

每调用一次该构造方法,就应该将传递的参数赋值给当前对象,但是每次创建的对象名是不同的,所以需要一个标识来指向每次创建的对象,这个标识就是this关键字

this关键字表示当前对象,谁调用这个构造方法,this就指向谁,表示谁

例:

package com.kgc.se.demo06;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 11:16
 * QQ:1512015112
 * VX:18056394367
 */


public class GirlFriend {

    public String name;
    public int age;
    public char gender;
    public double height;
    public double weight;
    public String hobby;
    public String address;

    //在类中添加了有参构造方法之后,默认的无参构造方法会被覆盖,所以手动添加一个无参构造方法
    public GirlFriend(){}

    //添加一个只包含对象name属性和age属性的有参构造方法
//    public  GirlFriend(String a,int b){
//        name =a;
//        age=b;
//    }

    //添加一个有参构造方法
//    public GirlFriend(String a,int b,char c,double d, double e,String f,String g){
//        name =a;
//        age=b;
//        gender =c;
//        height=d;
//        weight =e;
//       hobby= f;
//       address =g;
//    }

    //上面两个有参构造方法的形参列表中形参的名字没有做到见面之意,在调用方法时不便于知道各个参数的含义,所以修改形参名
    public  GirlFriend(String name,int age){
//        name =name;
//        age=age;
        //上面形参实现了见名知意,但是在创建对象时发现,传递过来的参数没有赋值给所创建对象的对应属性中,那么因为代码内部,将传递过来的参数又赋值给了自己本身,没有指明赋值给所创建的对象
        
        this.name=name;
        this.age=age;
    }

    public GirlFriend(String name,int age,char gender,double height, double weight,String hobby,String address){
//        name =name;
//        age=age;
//        gender =gender;
//        height=height;
//        weight =weight;
//        hobby= hobby;
//        address =address;
        this.name =name;
        this.age=age;
        this.gender =gender;
        this.height=height;
        this.weight =weight;
        this.hobby= hobby;
        this.address =address;
    }



    //定义方法
    public void printInfo(){
        System.out.println(name+"-"+age+"-"+gender+"-"+height+"-"+weight+"-"+hobby+"-"+address);
    }


}
package com.kgc.se.demo06;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/12 11:19
 * QQ:1512015112
 * VX:18056394367
 */


public class GirlFriendTest {

    public static void main(String[] args) {

        //使用GirlFriend类中默认存在的无参构造方法创建对象
        GirlFriend girlFriend1 = new GirlFriend();
        //给创建出来的girlfriend1对象的属性赋值
        girlFriend1.name = "小芳";
        girlFriend1.age =18;
        girlFriend1.gender = '男';
        girlFriend1.height = 165.5;
        girlFriend1.weight = 52.2;
        girlFriend1.hobby = "打男朋友";
        girlFriend1.address = "安徽";

        //输出girlfriend1对象的信息
        girlFriend1.printInfo();

        System.out.println("------------------------------");

        //使用Girlfriend类中的有参构造方法创建对象
        GirlFriend girlfriend2 = new GirlFriend("小红",20,'男',160.3,80.5,"拳击","安徽");
        //输出girlfriend2对象的信息
        girlfriend2.printInfo();

        GirlFriend girlFriend3 = new GirlFriend("小绿",60);
        //输出girlfriend3对象的信息
        girlFriend3.printInfo();

        GirlFriend girlFriend4 = new GirlFriend("小黄",20,'女',170.1,51.3,"打篮球","安徽");
        girlFriend4.printInfo();
    }
}

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

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

相关文章

C语言 函数——函数封装与程序的健壮性

目录 函数封装&#xff08;Encapsulation&#xff09; 如何增强程序的健壮性&#xff1f; 如何保证不会传入负数实参&#xff1f; 函数设计的基本原则 函数封装&#xff08;Encapsulation&#xff09; 外界对函数的影响——仅限于入口参数 函数对外界的影响——仅限于一个…

降额的秘密——不要挑战datasheet!

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 什么是降额设计&#xff1f;我们为什么要降额&#xff1f; 额指的是额定工作状态&#xff0c;降额就是…

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

基于YOLOv5s的电动车入梯识别系统(数据集+权重+登录界面+GUI界面+mysql)

本文目录 1.UI界面 2.注册登录 3.算法准确率 4.数据集 1.UI界面 本人训练的yolov5s模型&#xff0c;准确率在98.6%左右&#xff0c;可准确完成电梯内检测电动车任务&#xff0c;并搭配了GUI检测界面&#xff0c;支持权重选择、图片检测、视频检测、摄像头检测、识别结果拍照…

喜报!成都爱尔眼科医院再次获得成都市医学科技三等奖!

2024年4月10日&#xff0c;“2024年全市医疗管理和科教服务工作暨培训会”在成都市血液中心召开。会议为期一天&#xff0c;落实2024年全国、全省医政管理工作会和全省、全市卫生健康工作会等相关会议精神&#xff0c;总结2023年全市医疗管理和科教服务工作情况&#xff0c;部署…

go语言基础 -- 反射

反射的基本介绍 反射可以在运行时动态获取变量的信息&#xff0c;如变量的类型&#xff08;type&#xff09;&#xff0c;类别(kind)。如果是结构体变量&#xff0c;还可以获取到变量的字段、方法等结构体本身信息&#xff1b;通过反射&#xff0c;可以修改变量的值或调用关联…

【蓝桥杯】第十五届填空题a.握手问题

题解&#xff1a; 根据问题描述&#xff0c;总共有 50 人参加会议&#xff0c;每个人除了与自己以外的其他所有人握手一次。但有 7 个人彼此之间没有进行握手&#xff0c;而与其他所有人都进行了握手。 首先&#xff0c;计算所有人进行握手的总次数&#xff1a; 总人数为 50 …

LabVIEW电信号傅里叶分解合成实验

LabVIEW电信号傅里叶分解合成实验 电信号的分析与处理在科研和工业领域中起着越来越重要的作用。系统以LabVIEW软件为基础&#xff0c;开发了一个集电信号的傅里叶分解、合成、频率响应及频谱分析功能于一体的虚拟仿真实验系统。系统不仅能够模拟实际电路实验箱的全部功能&…

对给定向量旋转

对给定向量旋转 顺时针&#xff1a; 逆时针&#xff1a; 源码&#xff1a; QPointF rotateVector(const QPointF& dir, double angle, bool flag){double rad (angle * M_PI) / 180;QPointF res;if (flag){float x static_cast<float>(dir.x() * std::cos(rad) …

YOLOv8使用设备摄像头实时监测

代码如下&#xff1a; from ultralytics import YOLO import cv2 from cv2 import getTickCount, getTickFrequency yoloYOLO(./yolov8n.pt)#摄像头实时检测cap cv2.VideoCapture(0) while cap.isOpened():loop_start getTickCount() #记录循环开始的时间&#xff0c;用于计…

Rust腐蚀服务器常用参数设定详解

Rust腐蚀服务器常用参数设定详解 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师上期我们分享了rust腐蚀服务器的windows系统搭建方式&#xff0c;其中启动服务器bat参数因为涉及的东西比较多所以想通过这篇文章给大家做一下详细的分享。 &#xff08;注本文中xxxx…

叉车载货出入库AI检测算法介绍及应用

随着物流行业的快速发展&#xff0c;叉车作为物流运输的重要设备&#xff0c;其安全性和效率性越来越受到人们的关注。然而&#xff0c;在实际操作中&#xff0c;由于人为因素和操作环境的复杂性&#xff0c;叉车事故时有发生&#xff0c;给企业和个人带来了巨大的损失。为了提…

openjudge_2.5基本算法之搜索_1700:八皇后问题

题目 1700:八皇后问题 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后&#xff0c;要求每两个皇后之间不能直接吃掉对方。 输入 无输入。 输出 按给定顺序和格式输出所有八皇后问题的解&#xff08;见Sample Output&#xff09;。 样例输入 样例输…

【python】python饮料销售数据分析可视化(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【C语言__编译和链接__复习篇2】

目录 前言 一、翻译环境和运行环境 二、翻译环境 2.1 预处理 2.1 编译 2.1.1 词法分析 2.1.2 语法分析 2.1.3 语义分析 2.2 汇编 2.3 链接 三、运行环境 四、简答主线问题 前言 本篇主要讨论以下问题&#xff1a; 主线问题&#xff1a; 1. 源文件(.c)如何转换成(.exe)文件…

Java 基于微信小程序的智能停车场管理小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

二维数组---刷题

一维数组不想更了&#xff0c;弄点二维数组&#xff01; 1.新矩阵 思路 题目简单&#xff0c;6*636&#xff0c;可以得知有36个元素。数组就定义成a[7][7]&#xff0c;难点在与如何找出对角线上的元素。可以画图分析&#xff1a; 通过观察不难发现&#xff0c;元素1&#xff…

Django开发一个学生选课系统

在这个选课系统中&#xff0c;分为管理员和学生两种角色。 学生登录系统以后&#xff0c;只能看到选课信息。管理员登录以后&#xff0c;可以看到选课信息和其他的管理系统。 选课界面如下&#xff1a; 学生管理界面如下&#xff1a; 数据分析界面如下&#xff1a; 数据…

记一次centos合并excel,word,png,pdf为一个整体pdf的入坑爬坑过程(一直显示宋体问题)。

一、背景 原先已经简单实现了excel,word,png,pdf合成一个整体pdf的过程。并将它弄到docker容器中。 1、原先入坑的技术栈 php:7.4 (业务有涉及)php第三方包 setasign\Fpdi\Fpdi : 2.3.6 &#xff08;pdf合并&#xff09;libreoffice : 5.3.6.1ImageMagick: 6.9.10-68 2、…

计算机组成原理【CO】Ch2 数据的表示和应用

文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整…