首页 > 编程语言 >Java学习 (四) 面向对象--类与方法

Java学习 (四) 面向对象--类与方法

时间:2024-06-20 17:00:26浏览次数:14  
标签:p1 Java String -- 数据类型 面向对象 对象 方法 public

关于面向对象的知识点

1、 java类 以及类成员
       属性
       方法
       构造器
       代码块
       内部类


2、面向对象特征
       封装
       继承
       多态


3、  其他关键字使用
     this \ super \ package \ import  \static \ final\ interface\ abstract

一、类的组成

  1、定义类

vi Phone.java

public class Phone{
    //类的属性
    String name;
    double price;

    //方法1
    public void call(){
        System.out.println("打电话");
    }
    //方法2
    public void sendMessage(String message){
        System.out.println("发消息"+ message);
    }
    //方法3
    public void playGame(){
        System.out.println("打游戏");
    }
}

我们在一个java文件种定义了一个类,但是通常不会直接把main放到这个地方,我们会有一个测试文件去用main方法去调用这个文件下的类,上面的手机就相当于是一个对象

2、定义类测试文件

vi PhoneTEST.java

public class PhoneTEST {
    public static void main(String[] args) {
        //创建Phone对象
        //所有对象声明都是new开头
        Phone p1 = new Phone();


        //通过Phone的对象,调用其内部声明的属性或者方法
        //格式: 对象.属性  或者对象.方法
        p1.name = "huawei mate50";
        p1.price = 6999;


        System.out.println("name= " + p1.name + ",price " + p1.price);

        //调用方法
        p1.call();
        p1.sendMessage("123123");



    }
}

3、面向对象的操作过程

1、 创建类,并设计类的内部成员(属性、方法)
2、 创建类对象,比如 Phone p1  new Phone();
3、通过对象,调用其内部声明的属性或者方法,完成功能

4、面向对象内存解析

栈   方法内定义的变量放到栈中
堆   new 出来的结构(比如数组的实体,对象的实体),包括对象中的属性 (name age 那些都算)
方法区    存放类的带模板,比如Phone类的模板

1、创建类一个对象时的结构

 我们调用一个main方法,就会压入一个栈帧

 

 方法内声明的变量,是存放在栈帧里面的 p1

我们new 了一个对象,new的对象是放在堆里面的

 

 通过栈帧指向了,实体的地址

 

 

 当给对象内的值赋值时,会同构栈帧内的地址,找到实体的地址,修改实体堆内的数据

 

 

2、创建类的多个对象,属性赋值

 上图是前3行代码的效果

p2也new 了一个对象,会在堆中再建一个实体存储对象
也是在main栈帧中使用

 

 p1 p2 修改互不影响,但是也存在例外

 

我们在代码最后面新增了一个p1赋值给p3

会在栈帧中新增p3,但是和数组一样,只要你不new,就不会创建新的实体地址,只会指向

 

5、关于成员变量和局部变量

 在类中定义的是成员变量,在方法内定义的是局部变量

 

二、方法

1、方法的重载

在同一个类中,允许存在一个以上的同名方法,只要他们的参数列表不同即可,满足这一的多个方法,彼此之间构成方法的重载

注意:方法的重载与形参的名称、权限修饰符、返回值类型都没有关系

public class OverloadTest{
   public void add(int i  , int j){
   
   }
   
   public void add(int j  , int i){
   
   }
   public void add(String i  , int j){
   
   }
}

 如上,只要形成不一致,那么就允许重复定义,但不允许定义两个重复的方法

编译器会查看方法名是否一致,形参是否一致

 

 

2、可变个数形参的方法

默认情况下形成个数为固定的,在调用方法时,可能会出现方法的形参的类型是确定的,单是参数的格式不确定,就可以定义可变个数形成

public class OverloadTest{
    main
    overloadtest.add(1,2,3,4,5)
    //定义可变个数的形参数
        //支持重载
   public void add(int ... nums){
   
   }
   

}
 说明

可变长形参的使用

public class Main {

    public static void main(String[] args){
        Main test = new Main(); //声明当前类


        //引用类下的方法,会返回一些数据,通过info接受,传参中第一个是分隔符,后面是多个字符
        String info = test.add1("-","hello","world","you");
        System.out.println(info);
    }


    public String add1(String operator, String ... nums){
        //定义一个接收所有nums的变量
        String result = "";

        //当我拿到了传入的多个值时,需要使用循环来遍历形参中的值
        for (int i = 0; i < nums.length;i++)

            //当
            if(i == 0){
                result += nums[i];
            }else{
                result += (operator +nums[i]);
            }

        return result;

    }


}

 

3、方法值传递机制

1、基本数据类型

上面代码中存在一个误导,我们在使用基本数据类型的局部变量的时候

做了int n = m 的操作, 在基本数据类型中,这里不存在什么栈名和堆实体的关系,我们对m发生了修改,也和n没有关系,是之间传个变量

2、引用数据类型 数组

之前学过引用类型的,数组、对象

如果是引用数据类型,才会两者都发生改变

 

3、引用数据类型 对象
 

总结

    如果是基本数据类型的变量,则将变量保存的数据值传递出去
    如果是引用数据类型的变量,则将此变量保存的地址传递出去

4、参数传递说明

如果形参是基本数据类型,那么将实参赋值给形参
如果形参是引用类型,则将实参的地址值传给形参

5、递归方法

 在方法中自己调用自身的方法,就是递归

直接递归    a -》a方法
间接递归  a-》b-》c-》a

 

没有尽头的递归就会出线栈溢出 

 

 

案例 利用递归计算自然数从何

递归方法图解

递归注意

 

标签:p1,Java,String,--,数据类型,面向对象,对象,方法,public
From: https://blog.csdn.net/qq_42883074/article/details/139832279

相关文章

  • k8s容器启动不了,一直重启, 报红提示Not Ready
    k8s容器启动不了,一直重启,报红提示NotReady反复多次重启后,才能够启动成功。发现是启动时间过长,不断达到了失败阈值,于是会不断重启。将failureThreshold、initialDelaySeconds、periodSeconds这几个参数设置大一些,就可以启动了。k8s探针类型及探针配置:详情见:https://blo......
  • 万界星空科技MES系统中的仓库管理功能
    制造执行系统(ManufacturingExecutionSystem,简称MES)作为一种面向车间生产调度的管理信息系统,被广泛应用在车间作业调度和控制管理系统中,它以实现车间生产调度最优化为目标。同时,MES作为衔接ERP(企业计划管理层)和FCS(车间控制底层)的链路层,对于企业的生产效率、管理效率和经济效益......
  • 江西省2024年初中学业水平考试(中考)数学试题卷及答案
         ......
  • DAI功能简介
    Catalyst交换机上启用DHCPSnooping以及DAI(DynamicARPInspection)功能,目的是防止出现DHCP假冒以及ARP欺骗攻击。其中,DAI功能的实现需要借助DHCPSnooping建立的IP与MAC地址的绑定表。启用该功能后,发现交换机的某些端口每天不定时的发出大量ARP检测告警,告警发生时,相关联的PC无法......
  • 深入理解和实现Windows进程间通信(消息队列)
    常见的进程间通信方法常见的进程间通信方法有:管道(Pipe)消息队列共享内存信号量套接字下面,我们将详细介绍消息队列的原理以及具体实现。什么是消息队列?Windows操作系统使用消息机制来促进应用程序与操作系统之间的通信。每当发生事件(如键盘按键、鼠标移动或系统事件)时,......
  • 揭秘AI无人直播的核心功能 到底是割韭菜还是未来的核心竞争力呢
    AI无人直播平台具备以下核心功能:直播监控:借助先进的人工智能技术,平台能够实时、精细地监控直播画面,及时响应并处理异常情况,确保直播的流畅与稳定。不论是网络延迟、媒体传输问题还是用户投诉等,平台都能快速检测并采取相应措施,保障用户体验。无人直播咨询:yp2200227直播互动:平......
  • 07FlyERP系统介绍
    07FlyERP一套完善的ERP管理系统。实现了从采购入库、生产入库到销售出库、应收应付的完整流程。帮助解决企业发展壁垒,提高自身的核心竞争力,打造企业全程一体化管理体系,助力企业仓库,采购,销售,财务,生产,人事等智能化管理。接下来我以我们公司在用的ERP管理系统为例为大家分析,您......
  • SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes
     SyntaxError:(unicodeerror)'unicodeescape'codeccan'tdecodebytes报错解释:这个错误通常发生在Python代码中,当你尝试使用包含反斜杠(\)的字符串时。在Python中,反斜杠通常用于开始转义字符序列。例如,\n 代表一个换行符。在字符串前加 r 可以阻止这种转义,但是......
  • 鸿蒙实战案例-欢迎页面UI实现及欢迎页面业务
    前言      欢迎来到我的鸿蒙移动开发项目!我将致力于使用鸿蒙操作系统打造出色的移动应用。让我们一起开启创新的旅程!现在我们将做一个关于健康的软件,本次带来的是欢迎页面!一、设计与布局界面设计       这个布局看起来就是很简单的,是一个从上到下的列式布......
  • Go语言中的位运算符
    位运算(bitwiseoperations)是计算机科学中非常基础且重要的运算类型,它直接操作二进制位。Go语言中提供了一组位运算符,用于执行位级别的操作。Go语言中的位运算符按位与(&):作用:对两个操作数的每个位进行与运算,只有对应位都为1时,结果位才为1。示例:5&3(0101&0011=0001),结果......