一、对象与类

news/2024/4/29 10:43:34/文章来源:https://www.cnblogs.com/lostO/p/16620624.html

已经工作几年了,java,vue,python,C++各种项目都随叫随到,但除了C++其他都没有系统的学习过。这里仅记录下从头学习java基础的过程,和我认为值得记录的一些点,权当做一个备份和文档。

学习参考书:java核心技术 卷1 第九版。家里正好有这本书很多年了,也就看这个了,不是很推荐,原因:1,太厚,内容虽然详细但也很臃肿。2. 翻译,有些翻译不是很好理解。比如类中的数据,C++叫成员变量,这里翻译成域。

1  类的三种关系:use, has, is

2  封装:数据域私有,即隐藏数据的实现方式,只提供方法去操作。所有的使用者调用即可而不需要关心实现方法的都可以称为封装。

3  java的所有变量都是引用。这里的引用更类似与C++的指针,即每个java变量都是指向了一个内存中的对象(不深究的话可以简单的认为就是堆)。这里引申出来就很好理解java参数传递。java所有的参数都是变量的拷贝,而变量本身并不是对象而是对象的引用。举栗:

  class A{

    private int b=0;

    pubic void setB(int b){ this.b = b;}     

 }

  A isA = new A();

   无论是isA,或是传递给fun(A paramA)后的paramA,只要明白改变的是isA,paramA,还是真正的实例E,这个问题就很简单了。(这编辑器图片怎么才能浮动???)

  当我们调用isA.setB(1) 或者isA.setB(2)时,我们调用的都是对象提供的修改器方法,改变了对象内部的属性,而两个变量仍然指向E。这时很明显我们修改的是对象。而当我们使用isA = new A(); 或其他返回A类型的方法时,这时我们改变的是isA的对象。

  所谓的java传参时可变类型/不可变类型,不过是修改变量时,实例对象没有修改方法,那么只能让变量指向一个新的对象罢了。不要去这样理解。

  总之,变量是对象的引用,区分好变量与对象实例的关系,弄明白修改的是变量还是实例,这些问题都迎刃而解。

4 public:所有类可见,private:本类可见,protected:本包可见。本类可见和本包可见并不是指对象,同一类的两个对象A和B,A的方法中是可以访问B的private 数据的。

  例如:

  class A{

    private int b=0;

    pubic void setB(int b){ this.b = b;}  

    public boolean equals(A other){ return this.b ==other.b}                 //可以直接访问同类型other的数据

 }

  同样的包可见也可以,而且protected是默认的,只要在同一个包下就可以直接访问所有为protected的数据。

5  当类的数据包含可变对象时,最好不要编写可以直接返回该对象引用的方法,这会破环封装,可以使用clone()方法。原因跟上面一样。

6  static 修饰变量->类变量,修饰函数->类函数。static修饰的都属于类本身,而不是类实例。

7  方法的名称和参数构成了方法的签名。我们起名叫重载指的是同名不同参数的方法。但其实对于编译器来说它们就是两个不同的函数。方法名和参数类型构成了方法的唯一标识,跟返回值无关哦。

8  仅当没有提供任何构造器时,编译器才会提供默认的构造器。

9  初始化,在固定逻辑的数据进行初始化时,我们可以默认初始化,例如上面的 private int b=0; 同时也可调用静态方法初始化,例如 private int id = assignId(); private static int assignId(){//操作};

  构造函数可以在第一句时使用 this(参数)的方式调用该类的另一个构造函数。 

  初始化块 :

  class A{

  private b = 1;

  {b = 100;}

  }

  在构造对象的时候会按照在类声明中出现的顺序,依次执行所有初始化语句和初始化块。其实在这之前会赋值默认值,即上面的b会在初始化A类对象时,先b=0,再b=1,再b=100;

  静态初始化块:

  同样可以用以下块来初始化类型:

  class A{

    static{//这会在类加载时 执行,可用于初始化类变量等}

  }

10   类路径,在配置java环境时可配置CLASSPATH,也可在运行时用 -classpath 参数指明。运行java程序时,虚拟机会首先查找jre/lib, jre/lib/ext 下的文件和rt.jar等运行时文件,之后查找类路径。如果没有设置类路径,类路径默认包含当前目录,如果设置了类路径却没有包含".", "."代表当前目录,则不会查找当前目录。

 

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

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

相关文章

Python自学教程4-数据类型学什么

Hi,我是九柄,全网同号,今天我们说说Python的数据类型。 python数据类型有什么特点 每一门编程语言都要学数据类型的,每种类型的操作会稍微有一点区别。Python是一门非常灵活的编程语言,数据类型的指定和其他编程语言会稍微有一点区别。 首先,Python 不需要显性声明数据的…

解析 RocketMQ 业务消息--“顺序消息”

本篇将继续业务消息集成的场景,从功能原理、应用案例、最佳实践以及实战等角度介绍 RocketMQ 的顺序消息功能。作者:绍舒 引言 Apache RocketMQ 诞生至今,历经十余年大规模业务稳定性打磨,服务了阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方…

C# 读取MotherBoard的信息

通过C# 来读取PC 的MotherBoard 上的信息,如 产品名称,制造商,版本等,方法如下:Reference中添加 System.Management,并在头文件中引入该 Assemble 添加对应的类,并进行使用,如下实例:public static class MotherBoardInfo{private static ManagementObjectSearcher …

万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用

在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用。 我们以生产物料齐套分析为例来说明如何利用低代码将U8+系统中的系统进行扩展和应用。在开始之前,先来看看什么是生产…

java数据类型转换问题

我们知道java中的各个数据类型的取值范围不同,可以理解成容量大小,而针对容量大小可以对他们进行一个由低到高的排序,也就是优先级。 优先级 低-----------------------------------------------------------------------高 (byte,short,char)=> int => long => …

记esxi linux主机调整分区大小

调整前效果:调整后效果: 方法如下: 工具:VMware vCenter Converter

顶象为飞凡汽车App提供全方位防护 助力新能源汽车发展

汽车App集展示、体验、交互、交易和远程服务于一身,已成为智能汽车的一部分。日前,飞凡汽车与顶象达成合作,为飞凡汽车App提供安全加固服务,为用户提供全方位的安全保障。 用户眼里的“宝藏App” 每个智能汽车都有一个App,大多数将其当做车的附加服务,飞凡汽车把App当做汽…

Fecify 跨境电商系统,有哪些优势?

独立站是最近几年重新火爆起来的跨境电商经营方式。人都喜欢一切都掌握在自己手里的感觉,而独立站的好处就是自己说了算,足够自由。因为可以自己说了算,风险自己把控,自己做的事情,自己负责,独立站的这些自主特性深受货代人的喜爱。独立站以其独立自主的特性,引领未来跨…

删除RAID

场景 当服务器不需要RAID或重新配置RAID时,要先删除当前RAID配置来释放硬盘。 LSI SAS2208 (Legacy/Dual) 操作步骤 步骤1 通过远程虚拟控制台登录到服务器的实时操作桌面。 步骤2 登录CU管理界面。 步骤3 备份删除RAID中的数据。 步骤4 删除RAID。 1. 在CU主界面左侧区域中选…

HTML基础(二):标签学习

html学习笔记排版标签 标题标签场景:在新闻和文章的页面中,都离不开标题,用来突出显示文章主题代码:h系列标签<h1>1级标题</h1> <h2>2级标题</h2> <h3>3级标题</h3> <h4>4级标题</h4> <h5>5级标题</h5> <h…

电商行业:全链路监测广告投放效果,用数据驱动业务增长

哪个营销任务、营销渠道的引流用户更多? 买量用户的活跃、留存情况如何? 哪个营销任务引流的用户后续的加购、下单转化最多? HMS Core分析服务作为广告转化跟踪工具,广告主可实现从“曝光、点击、下载、激活、注册、留存、收藏、加入购物车、下单、开始结算、支付成功、复购…

35. Redis---缓存问题

1. 前言 在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL 配合使用。Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到 MySQL 中去查询了,而是直接获取 Redis 中的…

面试突击77:Spring 依赖注入有几种?各有什么优缺点?

IoC 和 DI 是 Spring 中最重要的两个概念,其中 IoC(Inversion of Control)为控制反转的思想,而 DI(Dependency Injection)依赖注入为其(IoC)具体实现。那么 DI 实现依赖注入的方式有几种?这些注入方式又有什么不同?接下来,我们一起来看。 0.概述 在 Spring 中实现依…

[AcWing 167] 木棒

DFS 剪枝点击查看代码 #include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e6 + 10;int n; int w[N]; int sum, len; bool st[N];bool dfs(int u, int s, int start) {if (u * len == sum)return true;if (s == len)return dfs(u + 1, 0, …

Word修订内容批量标红

Word修订标红Plus,适用于科研狗最近改文章,期刊要求提供所有修改内容都标红的修订稿,本着能不手改就不手改的原则,我尝试检索了一下自动修改的方法,最先找到的是简书上的一篇使用VB宏命令批量修改的文章 (Word-接受全部修订为标红字体),但是尝试之后发现运行时间很长,且…

《GB27607-2011》PDF下载

《GB27607-2011 机械压力机 安全技术要求》PDF下载 《GB27607-2011》简介本标准规定了机械压力机类产品的设计、制造、改造、使用的术语和定义、严重危险、安全要求和(或)措施、检验和使用信息; 本标准适用于压力机及作为压力机组成部分的辅助设备的设计、制造、改造和使用,也…

二进制位运算

二进制位运算基础及其应用: 一、基本位运算符: 1.& 按位与:(从左到右)二进制中对应位都是1则为1,否则为0; 2. | 按位或:(从左到右)二进制中对应位有一个是1则为1,否则为0; 3. ^按位异或:(从左到右)二进制中对应位相同则为0,不同为1; 4. <<左移:右侧…

《GB27887-2011》PDF下载

《GB27887-2011 机动车儿童乘员用约束系统》PDF下载 《GB27887-2011》简介 本标准规定了机动车儿童乘员用约束系统术语、定义,在车辆上的安装及固定要求,约束系统的结构,以及对约束系统总成及其组成部件的性能要求和试验方法;本标准适用于适合安装在三个车轮或三个车轮以上…

JS基础:数组、函数、对象

字符串要用英文双引号括起来。字符串与其他类型数据之间用加号+连接起来 // -------------------------------------------------------- JS中定义声明变量是用关键字var,JS中变量名函数名都可以用中文。 JS中定义数组不用写函数长度[],JS中可以定义字符串数组向数组添加新元…

《GB12523-2011》PDF下载

《GB12523-2011 建筑施工场界环境噪声排放标准》PDF下载 《GB12523-2011》简介本标准规定了建筑施工场界环境噪声排放限值及测定方法; 本标准适用于周围有噪声敏感建筑物的建筑施工噪声排放的管理、评价及控制。市政、通信、交通、水利等其他类型的施工噪声排放可参照本标准执…