JAVA面向对象(OOP)总结----宏观的程序设计

类:使用关键字class,抽象的概念集合。例如人类,具有共性的产物。

对象:具有自己独立属性,具有个性的个体。

类中可以定义的内容:

  1.  成员变量(属性);
  2. 成员方法(功能);
  3. 构造方法;
  4. 内部类;
  5. 代码块

创建一个对象: new Scanner();      new int[];

类的构造方法:每一个类中都有一个默认的无参构造方法。构造方法名与类名一致。无返回值。不用void修饰。

无参构造方法与有参构造方法对比:

public class Round {int r;String color;public Round(){}public Round(String color){this.color=color;}}

构造方法的作用:初始化创建对象。

 方法重载:在一个类中有多个名称相同的方法。

Q:当出现多个名称相同的方法该如何区分呢?

A:可通过传入的参数个数,类型顺序区分。

普通成员方法也可方法重载。

    public int area(int r){return (int) (r*r*Math.PI);}public double area(double r){return r*r*Math.PI;}

 

对象与引用

值传递:

1.基本类型值传递(形参改变不影响实参)

public class Myproject {public static void main(String[] args) {Round r1=new Round();int x=1;r1.draw(x);System.out.printf("x=%d\n",x);}
}
public class Round {int r;public void draw(int r){r=10;System.out.printf("r=%d\n",r);}
}

 

如上述所示,当main函数传入一个实参x,成员方法中改变了形参的大小,可是并没有影响实参最终大小。因此,基本类型的值传递时,形参的改变不影响实参的大小。 

 

2.引用类型值传递 (形参改变影响实参)

首先,我们介绍一下何谓引用类型的值,引用类型包括类(例如字符串),数组,接口。

 

public class Myproject {public static void main(String[] args) {Person p1=new Person();p1.name="adele";p1.Read_name(p1);System.out.println("对象p1最终的名字为:");System.out.println(p1.name);}
}
public class Person {String name;public void Read_name(Person person){person.name="amy";System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");System.out.println(person.name);}
}

 

 神奇的,我们发现最终在main函数中对象的name改变了,形参影响了实参。这是为什么呢?

这是因为在创建一个对象的时候,对象名指向的是持有对象在内存空间的地址(即引用变量)。

传入实参,形参也会指向实参地址,所以改变的是形参指向的地址上的值。接下来我们看看实参和形参所指向的内存地址是否相同来验证。

public class Myproject {public static void main(String[] args) {Person p1=new Person();p1.name="adele";System.out.println(p1);p1.Read_name(p1);
//        System.out.println("对象p1最终的名字为:");
//        System.out.println(p1.name);}
}
public class Person {String name;public void Read_name(Person person){System.out.println(person);
//        System.out.println(person.name);person.name="amy";System.out.println(person);
//        System.out.println("调用Read_name方法并且在成员方法中更改p1名字,输出的p1对象名字:");
//        System.out.println(person.name);}
}

 结果输出:

 通过结果发现,指向的的内存地址始终指向同一个,而改变的是该地址上的值。

所以可以得到结论:使用引用类型值传递时,形参改变会影响实参。


this关键字:表示当前正在操作的对象。

使用this关键字可以引用成员变量,成员方法。

static关键字(静态的意思):

  • 被static修饰的变量,在内存中只有一份。(比如创建了10个学生,他们都来自清华大学,那么此时可以使用static关键字,创建一个成员变量,节省内存空间)
  • 静态成员随着类的加载而加载
  • 使用类名可以直接对静态成员进行访问
  • 静态成员优先于对象存在
  • 修饰的成员被所有对象共享 

代码块:类似于没有名称的方法。

类的加载执行:

  1. 先加载类
  2. 加载静态成员(静态变量,方法,代码块)
  3. 创建对象
  4. 调用构造方法,初始化对象成员

访问权限修饰符(控制能否被外界访问)

  • public:修饰类,成员变量,成员方法。在任何地方均可访问
  • protected:修饰成员变量,成员方法。自己类中和同包类中访问,在不同包子类访问。
  • default(默认):修饰类,成员变量,成员方法。在自己类中和同包中访问。
  • private:修饰成员变量,方法。只能在自己类中访问。 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch.where()两种用法

参考官方文档。 官方文档中只给了第一种用法。根据条件condition,从input,other中选择元素f返回。如果满足条件,则返回input元素。若不满足,返回other元素。 还有一种用法是通过where返回张量中满足条件condition的坐标,以二维张…

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中,都会用到自动化测试环境,目前最常见的就是通过容器化方式部署自动化测试环境,但对于一些测试小白,不是很会搭建持续集成环境,特别是从0-1的过程,需要自行搭建很多依赖环境&am…

springboot项目制作docker镜像,如何动态传递变量值?

springboot项目制作成docker镜像后,如何给properties文件的变量动态传递值呢? 步骤1:将properties文件设置为如下形式 serverUrl${SERVER_URL} apiKey${API_KEY}步骤2:制作成docker镜像后,启动镜像时,通过…

【PCL-11】提取平面上层的目标物,剔除平面下层目标物

因项目需求,需提取平面上的物体,不提取平面下的物体,尝试采用超体聚类LCCP分割的方式,但由于上层点云模型一侧有空洞,导致分割效果不理想。 这里采用pcl::ExtractPolygonalPrismData类,实现平面上物体的提取…

代码混淆和加固,保障应用程序的安全性

摘要:本文将详细介绍iOS技术博主在保护应用程序代码安全方面的两种重要方式:代码混淆和代码加固。通过代码混淆和加固,博主可以有效防止他人对应用程序进行逆向工程和篡改,提高应用程序的安全性。 引言:作为iOS技术博…

实时云渲染应用之虚拟仿真项目的四大优势

虚拟仿真在教育领域的应用越来越广,尤其在科研和实验教学领域,这主要是因为虚拟仿真具有操作简单、场景逼真、更安全、易维护的优势。比如在实验教学过程中,一些实验对象相对于学生来说过于宏观或微观,学生不易理解,而…

北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一:Verilog代码没有跑通 报…

数据类型

目录 1.数值类型 整数类型 int 小数类型 double 2.字符类型 固定长度字符串 char 可变长度字符串 varchar 3.日期时间类型 日期类型:date 日期时间类型:datetime MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article…

DLL调试方法 VS2012 C++ 有代码时

把exe放到输出目录 并把调试 命令 设为 ( S o l u t i o n D i r ) (SolutionDir) (SolutionDir)(Platform)$(Configuration)\SmartPayDemo.exe 尽量用debug模式 反过来也行,把dll放在exe工程下也行。 解决方案exe工程中添加dll工程 dll本身是没法运行的&#…

Unreal Engine Loop 流程

引擎LOOP 虚幻引擎的启动是怎么一个过程。 之前在分析热更新和加载流程过程中,做了一个图。记录一下!! ![在这里插入图片描述](https://img-blog.csdnimg.cn/f11f7762f5dd42f9b4dd9b7455fa7a74.png#pic_center 只是记录,以备后用…

Linux下运行Jmeter压测

一、在Linux服务器先安装SDK 1、先从官网下载jdk1.8.0_131.tar.gz,再从本地上传到Linux服务器 2、解压:tar -xzf jdk1.8.0_131.tar.gz,生成文件夹 jdk1.8.0_131 3、在/usr/目录下创建java文件夹,再将 jdk1.8.0_131目录移动到/u…

基于 Containerd 搭建 Kubernetes 1.28.0 版本集群

主要操作步骤: 1、初始化 OS 2、对OS进行集群配置初始化 3、确定 部署机器与待安装机器 4、安装并配置 Containerd 5、安装 Kubernetes工具集 6、初始化全部的 master节点 7、安装 Kubernetes网络插件 8、将slave节点加入到集群中 *************************…

Fast-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

文章目录 6 Fast-MVSNet CVPR-20206.0 主要特点6.1 网络介绍6.2 稀疏高分辨率深度图预测6.3 深度图扩展6.4 -Newton 精细化MVSNet系列最新顶刊 对比总结6 Fast-MVSNet CVPR-2020 深度学习三维重建 Fast-MVSNet-CVPR-2020(源码、原文、译文、批注) 下载 6.0 主要特点 Spare …

RCNA 锐捷培训

第一章 网络基础入门 1.1 OSI参考模型及TCP/IP协议栈 数据是如何传输的? 数据在计算机网络中传输通常依赖于TCP/IP协议模型。 什么是网络? 网络是一种连接多个计算机、设备或系统的通信基础设施,其目的是实现资源共享、信息传递、接收和共享…

定时任务框架-xxljob

1.定时任务 spring传统的定时任务Scheduled,但是这样存在这一些问题 : 做集群任务的重复执行问题 cron表达式定义在代码之中,修改不方便 定时任务失败了,无法重试也没有统计 如果任务量过大,不能有效的分片执行 …

【计算机视觉 | CNN】Image Model Blocks的常见算法介绍合集(一)

文章目录 一、Residual Block二、Bottleneck Residual Block三、Dense Block四、Squeeze-and-Excitation Block五、Inception Module六、Non-Local Block七、Spatial Attention Module八、Spatial Transformer九、ResNeXt Block十、Fire Module十一、Inception-v3 Module十二、…

Linux基本认识

一、Linux基本概念 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多…

【DevOps系列】Docker数据卷(volume)详解

【DevOps系列】Docker数据卷(volume)详解 文章目录 【DevOps系列】Docker数据卷(volume)详解一、概述二、数据卷三、为什么使用数据卷volume数据卷的作用:数据卷的特点: 四、数据卷volume基本操作4.1 创建数…

android注解之APT和javapoet

前言 前面我们已经讲过注解的基本知识,对于注解还不太了解的,可以去看一下之前的文章, android 注解详解_袁震的博客-CSDN博客。 之前我们在讲注解的时候,提到过APT和JavaPoet,那么什么是APT和JavaPoet呢&#xff1…

人工智能安全-6-SQL注入检测

0 提纲 概述SQL注入方法SQL注入的检测方法SQL语句的特征提取天池AI上的实践 1 概述 SQLIA:SQL injection attack SQL 注入攻击是一个简单且被广泛理解的技术,它把 SQL 查询片段插入到 GET 或 POST 参数里提交到网络应用。 由于SQL数据库在Web应用中的…