Java 面向对象(类与对象 成员方法 方法重载 可变参数 构造方法 / 构造器 this关键字 包 访问修饰符)

目录

  • 一、类与对象
    • 1. 类与对象的定义
    • 2. 类和对象的内存分配机制
  • 二、成员方法
    • 1. 成员方法的定义
    • 2. 方法的调用机制
    • 3. 成员方法传参机制
  • 三、方法重载
  • 四、可变参数
    • 1. 基本概念
    • 2. 基本语法
    • 3. 应用
  • 五、 构造方法 / 构造器
    • 1. 特点
    • 2. 使用案例
    • 3. 对象创建的流程
  • 六、this关键字
    • 1. 运用场景
    • 2. 使用案例
  • 七、包
    • 1. 包的三大作用
    • 2. 包的基本语法
    • 3. 包的本质
    • 4. 使用案例
    • 5. 包的命名规则
    • 6. 常用的包
    • 7. 引入包
    • 8. 注意事项
  • 八、访问修饰符
    • 1. 简介
    • 2. 访问范围
    • 3. 注意事项


一、类与对象

1. 类与对象的定义

类(Class)

  • 类是Java中的基本构造单元,用于定义对象的属性和行为。
  • 类通过关键字 class 定义,然后包含类的名称以及类体中的属性和方法。
  • 一个类可以包含零个或多个属性(成员变量)方法(成员函数)
class Car {// 属性String brand;String color;int maxSpeed;// 方法void drive() {System.out.println("Driving at max speed: " + maxSpeed);}
}

对象(Object):

  • 对象是类的实例,即类的具体实现。
  • 使用 new 关键字创建类的对象,然后通过对象访问其属性和方法。
public class Main {public static void main(String[] args) {// 创建Car类的对象Car myCar = new Car();// 设置对象的属性myCar.brand = "Toyota";myCar.color = "Red";myCar.maxSpeed = 200;// 访问对象的方法myCar.drive();}
}

关系:

  • 类定义了对象的结构和行为,对象是类的实例,具有类定义的属性和方法。
  • 一个类可以有多个对象实例。
  • 类可以继承自其他类,从而形成父子关系,子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。

2. 类和对象的内存分配机制

  • Java 内存的结构分析
    1. 栈:一般存放基本数据类型(局部变量)。
    2. 堆:存放对象(Car myCar,数组等)。
    3. 方法区:常量池(常量,比如字符串),类加载信。

Person p = new Person();
p.name = "小明";
p.age = 1
  • Java 创建对象的流程
    1. 先加载 Person 类信息(属性和方法信息, 只会加载一次)
    2. 在堆中分配空间, 进行默认初始化(看规则)
    3. 把地址赋给 p p p p p p 就指向对象

在这里插入图片描述


二、成员方法

1. 成员方法的定义

访问修饰符 返回数据类型 方法名(形参列表..{//方法体语句;return 返回值;
}
  1. 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int mum2)
  2. 返回数据类型:表示成员方法输出, void 表示没有返回值。
  3. 方法主体:表示为了实现某一功能代码块。

2. 方法的调用机制

在这里插入图片描述


3. 成员方法传参机制

在这里插入图片描述

C++有指针和引用可以直接进行对原始数据的修改,而Java由于引用类型属于类,所以得通过类的成员方法对原始数据进行修改。

Java中的方法参数传递机制主要有两种:

按值传递(Pass by Value)(与C++相同):

  • 对于基本数据类型(如 int、double、char 等),方法参数的传递是按值传递的。
  • 在方法调用时,传递给方法的是实参的值的拷贝,而不是实参本身
  • 在方法内部对参数的修改不会影响到原始数据。
public class PassByValueExample {public static void main(String[] args) {int x = 10;System.out.println("Before method call: " + x); // 输出 10changeValue(x);System.out.println("After method call: " + x); // 输出 10}static void changeValue(int num) {num = 20; // 修改参数的值}
}

按引用传递(Pass by Reference)的模拟:

  • 对于对象类型(如类实例),方法参数的传递在表面上看起来是按引用传递的。
  • 但实际上,Java 中的对象参数传递是通过将对象的引用(地址)传递给方法,而不是对象本身。
  • 这意味着在方法中对对象属性的修改会影响原始对象。
class Person {String name;Person(String name) {this.name = name;}
}public class PassByReferenceExample {public static void main(String[] args) {Person person = new Person("Alice");System.out.println("Before method call: " + person.name); // 输出 AlicechangeName(person);System.out.println("After method call: " + person.name); // 输出 Bob}static void changeName(Person p) {p.name = "Bob"; // 修改对象属性}
}

三、方法重载

与C++一致

案例:类:MyCalculator 方法:calculate
1) calculate(int n1, int n2) //两个整数的和
2) calculate(int n1, double n2) //一个整数,一个 double 的和
3) calculate(double n2, int n1)//一个 double ,一个 Int 和
4) calculate(int n1, int n2,int n3)//三个 int 的和

注意事项和使用细节:

  1. 方法名:必须相同。
  2. 形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)。
  3. 返回类型:无要求。

四、可变参数

1. 基本概念

通过可变参数 Java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。


2. 基本语法

访问修饰符 返回类型 方法名(数据类型... 形参名) {...
}

可以将对应数据类型的数组传入方法的形参中


3. 应用

public int sum(int... nums) {//System.out.println("接收的参数个数=" + nums.length);int res = 0;for(int i = 0; i < nums.length; i++) {res += nums[i];}return res;
}
public class VarArgsExample {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5};double[] doubles = {1.1, 2.2, 3.3, 4.4, 5.5};// 调用方法,传递数组给可变参数printNumbers(numbers);printDoubles(doubles);}// 方法接受可变参数static void printNumbers(int... nums) {System.out.print("Numbers: ");for (int num : nums) {System.out.print(num + " ");}System.out.println();}// 同样的方法接受可变参数static void printDoubles(double... nums) {System.out.print("Doubles: ");for (double num : nums) {System.out.print(num + " ");}System.out.println();}
}

五、 构造方法 / 构造器

与C++类似

1. 特点

  1. 方法名和类名相同
  2. 没有返回值
  3. 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。

2. 使用案例

public class Car {// 属性String brand;String color;int maxSpeed;// 构造方法public Car(String brand, String color, int maxSpeed) {this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;}// 方法void drive() {System.out.println("Driving " + color + " " + brand + " at max speed: " + maxSpeed);}public static void main(String[] args) {// 创建Car类的对象,并调用构造方法进行初始化Car myCar = new Car("Toyota", "Red", 200);// 调用对象的方法myCar.drive(); // 输出 Driving Red Toyota at max speed: 200}
}

3. 对象创建的流程

在这里插入图片描述


六、this关键字

与C++的this指针一致

在Java中,this 是一个关键字,用于引用当前对象。

1. 运用场景

  1. 区分局部变量和实例变量
    当实例变量和局部变量同名时,可以使用 this 关键字来区分它们。this 引用的是当前对象的实例变量,而不是局部变量。

  2. 在构造方法中调用其他构造方法
    在一个构造方法中调用同一个类的另一个构造方法时,可以使用 this 关键字。

  3. 传递当前对象给其他方法
    可以将当前对象作为参数传递给其他方法,或者返回当前对象。

由于Java没有缺省参数 所以采用重载来达到类似效果
如下面 运用 this关键字调用另一个构造方法 来达到缺省参数的效果


2. 使用案例

public class Person {// 实例变量String name;int age;// 构造方法1:使用this关键字调用另一个构造方法public Person() {this("John", 30); // 调用另一个构造方法// 由于Java没有缺省参数 所以采用重载来达到类似效果}// 构造方法2:接受参数来初始化对象public Person(String name, int age) {this.name = name; // 使用this引用当前对象的实例变量this.age = age;   // 使用this引用当前对象的实例变量}// 方法:打印对象的信息public void display() {System.out.println("Name: " + this.name + ", Age: " + this.age);}// 方法:传递当前对象给其他方法public Person getPerson() {return this;}public static void main(String[] args) {// 创建Person对象Person person1 = new Person();person1.display(); // 输出 Name: John, Age: 30// 创建Person对象,并传递给其他方法Person person2 = new Person("Alice", 25);Person person3 = person2.getPerson();person3.display(); // 输出 Name: Alice, Age: 25}
}

七、包

1. 包的三大作用

  • 区分相同名字的类。
  • 当类很多时,可以很好的管理类。
  • 控制访问范围。

2. 包的基本语法

package com.hspedu;

说明

  1. package 关键字,表示打包。
  2. com.hspedu 表示包名。

3. 包的本质

在这里插入图片描述


4. 使用案例

在这里插入图片描述


5. 包的命名规则

在这里插入图片描述


6. 常用的包

一个包下,包含很多的类,java 中常用的包有;

1) java.lang.* //lang 包是基本包,默认引入,不需要再引入
2) java.util.* //util 包,系统提供的工具包, 工具类,使用 Scanner
3) java.net.* //网络包,网络开发。
4) java.awt.* //是做 java 的界面开发,GUI

7. 引入包

在这里插入图片描述


8. 注意事项

在这里插入图片描述

//package 的作用是声明当前类所在的包,需要放在类(或者文件)的最上面,
// 一个类中最多只有一句 packagepackage com.hspedu.pkg;//import 指令 位置放在 package 的下面,在类定义前面,可以有多句且没有顺序要求
import java.util.Scanner;
import java.util.Arrays;//...

八、访问修饰符

1. 简介

Java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  1. 公开级别:用 public 修饰,对外公开
  2. 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开。
  4. 私有级别:用 private 修饰,只有类本身可以访问,不对外公开。

2. 访问范围

在这里插入图片描述


3. 注意事项

  1. 修饰符可以用来修饰类中的属性,成员方法以及类。
  2. 只有默认的和public才能修饰类,并且遵循上述访问权限的特点。
  3. 成员方法的访问规则和属性完全一样。
//com.hspedu.modifier:需要很多文件来说明(A类,B类,Test类...)

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

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

相关文章

【Linux】信号保存{sigset_t/sigpending/sigprocmask/bash脚本/代码演示}

文章目录 1.信号相关常见概念2.管理信号的数据结构3.初识sigset_t4.信号集操作函数4.1sigpending4.2sigprocmask4.2代码测试1.测试12.测试23.测试3 4.3bash 脚本文件 1.信号相关常见概念 信号相关动作&#xff1a;产生 发送 接收 阻塞 递达(处理) 实际执行信号的处理动作称为信…

0基础 三个月掌握C语言(11)

字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数&#xff0c;这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别&#xff0c;例如…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

粤嵌6818开发板触摸屏应用

一、触摸屏应用 1.触摸屏设备的名字 在Linux下&#xff0c;一切皆文件&#xff0c;触摸屏也是一个文件。 触摸屏设备的名字&#xff1a;/dev/input/event0 2.触摸屏的两个专业术语 事件 ->event0 当一些外接控制设备(鼠标、键盘&#xff0c;wifi&#xff0c;触摸屏&am…

4.1_7 文件共享

文章目录 4.1_7 文件共享&#xff08;一&#xff09;基于索引结点的共享方式&#xff08;硬链接&#xff09;&#xff08;二&#xff09;基于符号链的共享方式&#xff08;软链接&#xff09; 总结 4.1_7 文件共享 注意&#xff1a;多个用户共享同一个文件&#xff0c;意味着系…

单片机第四季-第二课:uCos2源码-BSP

1&#xff0c;初始uCos2 文件中uC开头的为uCos相关的。 2&#xff0c;uCos2源码工程建立 建立Source Insight工程 寻找main函数 (1)RTOS其实就是一个大的裸机程序&#xff0c;也是从main开始运行的 (2)main之前也是有一个汇编的启动文件的 (3)main中调用了很多初始化函数 bsp部…

《你就是孩子最好的玩具·升级版》笔记(一)尊重孩子的感受

目录 简介 经典摘录 简介 作者是&#xff08;美&#xff09;金伯莉布雷恩。奠定父母与孩子一生亲密关系的情感引导书。 什么是情感引导&#xff1f; 情感引导式教育的核心&#xff0c;就是教我们的孩子如何去合理地认知以及表达自己的感受&#xff0c;书中更侧重于在这方面为…

【NBUOJ刷题笔记】递推_递归+分治策略2

0. 前言 PS&#xff1a;本人并不是集训队的成员&#xff0c;因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识&#xff0c;另一方面是给NBU学弟学妹们参考解题思路&#xff08;切勿直接搬运抄袭提交作业&#xff01;&#xff01;&#xff01;&#xff09;最后&…

【matlab】如何批量修改图片命名

【matlab】如何批量修改图片命名 (●’◡’●)先赞后看养成习惯😊 假如我的图片如下,分别是1、2、3、4、5的命名 需求一:假如现在我需要在其后面统一加上_behind字符串,并且保留原命名,同时替换掉原先的图片,也就是不copy新的一份,直接在原文件夹中处理,我们可以进行…

软件杯 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

openEuler学习总结1(仅供学习参考)

华为的openEuler内核是源于Linux。 openEuler操作系统安装流程 第一步&#xff1a;开启虚拟化 第二步&#xff1a;安装一个虚拟化软件virtualbox 第三步&#xff1a;镜像 第四步&#xff1a;配置 设置虚拟机所在的目录 把网卡类型选择成桥接网卡 挂载镜像 设置完成&#xff0…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中&#xff0c;会损失大量信息&#xff0c;例如图中的马在建模过程中逐渐变得模糊&#xff0c;从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说&#xff0c; PGI包含三个部分&#xff0c;&#xff0…

【你也能从零基础学会网站开发】Web建站之jQuery进阶篇 jQuery常见属性和方法概述与使用

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 jQuery创建新的…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2010-3863)

Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Apache Shiro 1.1.0以前的版本中&#xff0c;shiro 进行权限验证前未对url 做标准化处理&#xff0c;攻击者可以构造/、//、…

交流互动系统|基于springboot框架+ Mysql+Java+Tomcat的交流互动系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

redis学习-String类型的命令介绍以及特殊情况分析

目录 1. set key value 2. get key 3. append key string 4. strlen key 5. incr key 和 decr key 6. incrby key num 和 decrby key num 7. getrange key start end 8. setrange key start string 9. setex key time value 10. setnx key value 11. mset key1 val…

【Web开发】CSS教学(超详细,满满的干货)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Web开发】CSS教学(超详细,满满的干货) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 CSS一. 什么是CSS?1.1 基本语法规范1.2 引入方式1.3 规范 二. CSS选…

【第三章-1】面向对象——类与对象基本概念

目录 1.引例 2.类class 3. 面向对象中什么是对象&#xff1f; 4.类和对象的关系 5.面向对象编程 6.IDEA创建类与对象 7.成员变量 8.IDEA上代码练习成员变量 9.什么是方法 10.包Package&#xff08;详细参考&#xff09; 11.访问修饰符 12.面向对象与面向过程 1.引例…

Docker入门二(应用部署、迁移与备份、DockerFile、docker私有仓库、Docker-Compose)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.镜像备份和恢复(打包成压缩包&#xff09; 三、DockerFile0.镜像从哪里来&#xff1f;1.什么是DockerFile2.DockerFile 构建特征3.DockerFile命令描述4.构建一个带vim的centos镜像案例5…

PC-DARTS: PARTIAL CHANNEL CONNECTIONS FOR MEMORY-EFFICIENT ARCHITECTURE SEARCH

PC-DARTS&#xff1a;用于内存高效架构搜索的部分通道连接 论文链接&#xff1a;https://arxiv.org/abs/1907.05737 项目链接&#xff1a;https://github.com/yuhuixu1993/PC-DARTS ABSTRACT 可微分体系结构搜索(DARTS)在寻找有效的网络体系结构方面提供了一种快速的解决方案…