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

news2024/10/23 2:45:05

关于面向对象的知识点

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

 

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

 

 

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

递归方法图解

递归注意

 

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

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

相关文章

北方高温来袭!动力煤却不涨反跌的原因分析

内容提要 北方高温而南方降雨偏多的格局或将继续&#xff0c;整体水力发电量增长可能继续明显增长&#xff0c;但火电增幅可能继续缩小。5月重点火电厂的发电量和耗煤量增速均呈现负增长&#xff0c;耗煤量月度同比下降7%&#xff0c;而重点水电同比大增近40%。我国电力行业绿…

Apple Phone Memory

Apple Phone Memory 苹果手机内存查询&#xff0c;哪些应用程序&#xff08;app&#xff09;占用内存&#xff1a; 设置 通用 iPhone储存空间 清理下QQ音乐&#xff1a;

灵感互娱U3D笔试题

文章目录 题目1解析 题目2解析 题目3解析 题目4数组链表 题目5解析 题目6解析 题目7解析题目8解析 后话 题目1 以下C#代码的输出顺序是什么 namespace ConsoleApp2 {internal class Program{class A{ public A(string text){Console.WriteLine(text);}}class B{static A a1 …

同城跑腿多合一系统源码小程序支持安卓+IOS+公众号+H5

&#x1f680; 同城跑腿多合一小程序&#xff1a;便捷生活新选择 &#x1f4a8; 一、引言&#xff1a;走进便捷新纪元 在这个快节奏的现代生活中&#xff0c;时间成了最宝贵的财富。而“同城跑腿多合一小程序”正是为了满足大家对于便捷、高效生活的追求而诞生的。它不仅是一款…

高效设计必选!5款好用的UI动效工具

UI 动态设计是应用程序设计的重要组成部分。随着技术的积累&#xff0c;UI设计中的动态效果遍地开花&#xff0c;UI动态效果可以使我们的页面更时尚、更有趣、更人性化。5G网络的快速发展也使美丽的动态效果几乎无缝地嵌入到UI界面中。今天&#xff0c;毫不夸张地说&#xff0c…

豆瓣电影top250网页爬虫

设计思路 选择技术栈:确定使用Python及其相关库&#xff0c;如requests用于发送网络请求&#xff0c;获取网址&#xff0c;用re(正则表达式)或BeautifulSoup用于页面内容解析。设计流程:规划爬虫的基本流程&#xff0c;包括发起请求、接受响应、解析内容、存储数据等环节。模块…

CCF推荐会议必投攻略:这些顶级会议投完直通录取大门

CCF推荐会议必投攻略&#xff1a;这些顶级会议投完直通录取大门&#xff01; 会议之眼 快讯 CCF介绍 CCF&#xff08;China Computer Federation&#xff09;即中国计算机学会&#xff0c;前身是中国电子学会计算机专业委员会&#xff0c;成立于1962年。这是由从事计算机及相…

容器基本概念_从虚拟化技术_到容器化技术_开通青云服务器_并远程连接_容器安装---分布式云原生部署架构搭建007

这一部分,属于以前都会用到的,会快速过一遍,对于关键技术问题会加以说明 https://www.yuque.com/leifengyang/oncloud文档地址在这里,可以看,有些命令可以复制使用 可以看到容器的出现就是 目的就是,让你做的所有的软件,都可以一键部署启动 打包就是docker build 然后: 对于…

Github生成Personal access tokens及在git中使用

目录 生成Token 使用Token-手工修改 使用Token-自动 生成Token 登录GitHub&#xff0c;在GitHub右上角点击个人资料头像&#xff0c;点击Settings → Developer Settings → Personal access tokens (classic)。 在界面上选择点击【Generate new token】&#xff0c;填写如…

ctfshow web七夕杯

web签到 执行命令没有回显&#xff0c;我们直接写文件就可以了 有字符长度限制 ls />a nl /*>a访问url/api/a下载文件 easy_calc <?phpif(check($code)){eval($result."$code".";");echo($result); }function check(&$code){$num1…

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建 软件版本一、软件安装1、Python安装2、Pycharm安装3、pyside6或pyqt6安装①安装pyside6②安装PyQt6和pyqt6-tools二、Pycharm项目配置1、插件安装2、新建项目以及环境配置3、包管理安装三、在Pycharm中配置PySide61、pyside6 Qt…

Redis持久化主从哨兵分片集群

文章目录 1. 单点Redis的问题数据丢失问题并发能力问题故障恢复问题存储能力问题 2. Redis持久化 -> 数据丢失问题RDB持久化linux单机安装Redis步骤RDB持久化与恢复示例RDB机制RDB配置示例RDB的fork原理总结 AOF持久化AOF配置示例AOF文件重写RDB与AOF对比 3. Redis主从 ->…

C/C++ struct stat介绍

目录 前言 struct stat struct stat 使用 参考 共勉 前言 本文详细介绍了stat结构体的成员变量&#xff0c;以及使用案例&#xff0c;希望能够帮到您。 struct stat struct stat 结构体用于表示文件或者文件系统对象信息的一种结构体的声明&#xff0c;通常在POSIX&#x…

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂&#xff0c;但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下&#xff0c;与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…

基于JSP的个人交友网站系统

开头语&#xff1a; 你好&#xff0c;我是计算机学长猫哥。在这个信息时代&#xff0c;个人交友网站为我们提供了一个便捷的社交平台。如果你对本系统感兴趣或有更多需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技…

多线程(Lock锁,死锁,等待唤醒机制,阻塞队列,线程池)

Lock锁 虽然我们可以理解同步代码块和同步方法的锁对象问题但是我们并没有直接看到在哪里加上了锁&#xff0c;在哪里释放了锁为了更清晰的表达如何加锁和释放锁&#xff0c;JDK5以后提供了一个新的锁对象Lock Lock实现提供比使用synchronized方法和语句可以获得更广泛的锁定操…

网络编程(七)网络超时检测

文章目录 一、概念二、实现方式&#xff08;一&#xff09; 使用select实现超时检测1. select函数补充说明&#xff1a;2. 使用示例3. 输出结果 &#xff08;二&#xff09; 使用setsockopt函数1. 函数定义2. 获取发送缓冲区和接收缓冲区的大小3. 端口复用4. 设置超时时间 &…

每日复盘-202406020

今日关注&#xff1a; 20240620 六日涨幅最大: ------1--------300462--------- 华铭智能 五日涨幅最大: ------1--------300462--------- 华铭智能 四日涨幅最大: ------1--------300462--------- 华铭智能 三日涨幅最大: ------1--------300462--------- 华铭智能 二日涨幅最…

华为数通企业面试笔试实验题

1. 笔试题 1.1 实验拓扑 1.2 实验要求 公司A为小型销售公司,需要实现基本上网功能,蓝色部分为外网线,提供DHCP服务 DnsServer:114.114.114.114 帮助网管排查某一台计算机在某一台交换机的某个端口 2. 操作步骤 配置路由器相关的LAN侧接口IP地址 配置DHCP项,要求有PC1与PC2…

关于椭圆的方程(有Python画的动图)

关于椭圆的方程&#xff08;有Python画的动图&#xff09; flyfish 几何定义 椭圆是平面上所有到两个固定点&#xff08;焦点&#xff09;的距离之和为常数的点的集合。这两个固定点叫做焦点。 解析几何描述 设椭圆的两个焦点为 F 1 F_1 F1​ 和 F 2 F_2 F2​&#xff…