当前位置: 首页 > 编程日记 > 正文

java 它 引用(基本类型的包装,构造函数和析构函数c++不同)

  一个:java 和c++参考控制

他提到引用,我们会想到java它不喜欢c++里面的指针。当然java内引用和c++里面的引用是不同的。

比如:

比方C++中,我对某一个函数的声明。int a(int &b),b即为引用类型,函数内b的改动能够影响到函数外部。

C++中,int a(int &b){},b即为引用类型,若没有&。b即为值类型。可是在java里面没有显示的符号说明是引用。

Java没有这种概念,可是有引用类型与值类型的差别能够把一个引用类型当作參数传递,此时函数内部的改动会影响到外部

二:java中的引用是自发的,基本类型传递的是值。对象和数组传递的是引用

例如以下表达式: A a1 = new A(); 它代表A是类。a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象

在JAVA里,“=”不能被看成是一个赋值语句。它不是在把一个对象赋给另外一个对象,它的运行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针。但它的引用事实上质就是一个指针,引用里面存放的并非对象。而是该对象的地址,使得该引用指向了对象。在JAVA里。“=”语句不应该被翻译成赋值语句,由于它所运行的确实不是一个赋值的过程。而是一个传地址的过程。被译成赋值语句会造成非常多误解,译得不准确。

再如: A a2; 它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null; 再如: a2 = a1; 它代表。a2是引用。a1也是引用。a1所指向的对象的地址传给了a2(传址)。使得a2和a1指向了同一对象。 

综上所述,能够简单的记为。在初始化时,“=”语句左边的是引用。右边new出来的是对象。

在后面的左右都是引用的“=”语句时,左右的引用同一时候指向了右边引用所指向的对象。

再所谓实例,事实上就是对象的同义词。

值传递:(形式參数类型是基本数据类型):方法调用时,实际參数把它的值传递给相应的形式參数。形式參数仅仅是用实际參数的值初始化自己的存储单元内容,是两个不同的存储单元。所以方法运行中形式參数值的改变不影响实际參数的值

引用传递:(形式參数类型是引用数据类型參数):也称为传地址。方法调用时,实际參数是对象(或数组),这时实际參数与形式參数指向同一个地址。在方法运行中,对形式參数的操作实际上就是对实际參数的操作,这个结果在方法结束后被保留了下来,所以方法运行中形式參数的改变将会影响实际參数。

三:java 创建对象的方式

1.new       2.newInstance

3.clone     4.反序列化


5.String s = "abc"(这个是比較特殊的)

以String类为例
第一种:
String str = new String();
另外一种:
String str = Class.forName(String).newInstance()
两种方法创建的对象实体没有不论什么差别,假设硬说有差别的话,那就是第一种直接调用了本类的构造函数,假设本类有多个构造函数重载的话,能够加入參数。而另外一种是调用这个类的默认构造函数,即不带不论什么參数的。
第一种方法是最经常使用,最普遍的使用方法。

另外一种方法叫做工厂模式,是一种较安全的方法。

四:java中有析构函数,但与C++中的不同没有~

java中有析构函数,但我们一般用不到它,由于java有自己主动内存回收机制。无需程序猿来释放。也就不要操心内存泄露,仅仅只是java中析构函数所採用的方式不是C++中的那样前加~号。在java中
对象析构时会调用void finalize()方法,因此你假设确实须要析构的话就能够为你写的类加入一个void finalize(){}方法,来完毕你所须要的工作

五:java中的基本类型的包转类,泛型时须要,由于泛型不能应用到基本类型上(百度摘抄)

java语言是一个面向对象的语言,可是Java中的基本数据类型却是不面向对象的,这在实际使用时存在非常多的不便,为了解决这个不足,在设计类时为每一个基本数据类型设计了一个相应的类进行代表,这样八个和基本数据类型相应的类统称为包装类(Wrapper Class)。有些地方也翻译为外覆类或数据类型类。

包装类均位于java.lang包,包装类和基本数据类型的相应关系例如以下表所看到的:

包装类相应表

基本数据类型

包装类

byte

Byte

boolean

Boolean

short

Short

char

Character

int

Integer

long

Long

float

Float

double

Double   在这八个类名中。除了IntegerCharacter类以后,其他六个类的类名和基本数据类型一直,仅仅是类名的第一个字母大写就可以。

         对于包装类说,这些类的用途主要包括两种:

                  a、作为和基本数据类型相应的类类型存在。方便涉及到对象的操作。

                  b、包括每种基本数据类型的相关属性如最大值、最小值等。以及相关的操作方法。

         因为八个包装类的使用比較类似。以下以最经常使用的Integer类为样例介绍包装类的实际使用。

         1、实现intInteger类之间的转换

在实际转换时。使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换,实现的代码例如以下:

                  int n = 10;

                  Integer in = new Integer(100);

                  //int类型转换为Integer类型

                  Integer in1 = new Integer(n);

                  //Integer类型的对象转换为int类型

                  int m = in.intValue();

         2Integer类内部的经常用法

                 Integer类内部包括了一些和int操作有关的方法,以下介绍一些比較经常使用的方法:

                  aparseInt方法

                           public static int parseInt(String s)

该方法的作用是将数字字符串转换为int数值。

在以后的界面编程中,将字符串转换为相应的int数字是一种比較常见的操作。

使用示比例如以下:

                                    String s = “123”;

                                    int n = Integer.parseInt(s);

int变量n的值是123。该方法实际上实现了字符串和int之间的转换,假设字符串都包括的不是都是数字字符,则程序运行将出现异常。(说明:异常的概念将在下一章进行讲述)

另外一个parseInt方法:

        public static int parseInt(String s, int radix)

则实现将字符串依照參数radix指定的进制转换为int,使用示比例如以下:

        //将字符串”120”依照十进制转换为int,则结果为120

        int n = Integer.parseInt(“120”,10);

        //将字符串”12”依照十六进制转换为int。则结果为18

        int n = Integer.parseInt(“12”,16);

        //将字符串”ff”依照十六进制转换为int。则结果为255

        int n = Integer.parseInt(“ff”,16);

这样能够实现更灵活的转换。

                  btoString方法

                           public static String toString(int i)

                           该方法的作用是将int类型转换为相应的String类型。

                           使用演示样例代码例如以下:

                                    int m = 1000;

                                    String s = Integer.toString(m);

                           则字符串s的值是”1000”

                           另外一个toString方法则实现将int值转换为特定进制的字符串:

                                    public static int parseInt(String s, int radix)

                           使用演示样例代码例如以下:

                                    int m = 20;

                                    String s = Integer.toString(m);

                           则字符串s的值是”14”

         事实上,JDK自从1.5(5.0)版本号以后,就引入了自己主动拆装箱的语法。也就是在进行基本数据类型和相应的包装类转换时,系统将自己主动进行。这将大慷慨便程序猿的代码书写。使用演示样例代码例如以下:

                  //int类型会自己主动转换为Integer类型

                  int m = 12;

                  Integer in = m;

                  //Integer类型会自己主动转换为int类型

                  int n = in;

         所以在实际使用时的类型转换将变得非常easy,系统将自己主动实现相应的转换。

六:static块再类载入的时候就调用,不用初试话为对象

package edu.tju.test;public class AA {
//	private AA(){}
//	//public AA(){}
//	private static AA instance = null;
//	public static int cp = 0;
//	public AA getInstacne(){
//		if(null == instance){
//			instance = new AA();
//			cp++;
//		}
//		cp++;
//		return instance;
//	}static{System.out.println("Test……static");}public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
//		System.out.println("Test……" + cp);
//		AA aa = new AA();
//		AA bb = (AA)Class.forName("edu.tju.test.AA").newInstance();
//		//bb = aa;
//		aa.getInstacne();
//		System.out.println("Test……" + cp);
//		bb.getInstacne();
//		System.out.println("Test……" + cp);new AA();new AA();try{return;}finally{System.out.println("Test……");}}
}

输出结构为:

Test……static
Test……


版权声明:本文博客原创文章。博客,未经同意,不得转载。

相关文章:

使用程序解决一道逻辑推理题

今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客) 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天: 3月4…

AjaxControlToolKit之DragPanelExtender用法

1、将控件ToolkitScriptManager拖至页面中...2、定义3个Panel&#xff0c;用于实现窗体拖动效果&#xff0c;代码如下&#xff1a;1<body>2<form id"form1"runat"server">3<div>4<cc1:ToolkitScriptManager ID"ToolkitScriptMan…

自带数据线的迷你数显充电宝,旅途必备

还有20多天就过年了有件极其考验情商的事情也来临了就是我们这群90后过年最怕的事情——相亲但是在尴尬的场合手机可是一个缓解气氛的好东西不管是想要选择看电影&#xff0c;还是找附近的游玩只要有手机&#xff0c;就可以从容不迫的应对但是带手机最尴尬的事情莫过于结账的时…

SpringJDBC的简单应用

此处写上应用JdbcTemplate的dao操作数据库的一些代码&#xff08;含基本的增删改查&#xff0c;注&#xff1a;重点是查询出多条语句的写法&#xff09;&#xff1a; package org.sakaiproject.zhaorui.dao.impl;import java.sql.ResultSet;import java.sql.SQLException;impor…

WMI技术介绍和应用——查询硬件信息

这个月实在太忙了&#xff0c;一直没有时间去继续写WMI的应用例子。 本来是希望将《WMI技术介绍和应用》系列博文写的像WMI百科全书般&#xff0c;但是貌似对这个技术感兴趣的同学并不多&#xff0c;所以我决定对部分知识点点到为止&#xff0c;有需求的同学可以查询MSDN相关类…

微软开源的自动机器学习工具上新了:NNI概览及新功能详解

作者 | 宋驰来源 | 微软研究院AI头条&#xff08;ID: MSRAsia&#xff09;2018年9月&#xff0c;微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) &#xff0c;目前已在 GitHub 上获得 3.8K 星&#xff0c;成为最热门的自动机器学习&#xff08;AutoML&#xff…

10624 - Super Number

题目链接 题意&#xff1a;给出n到m的范围&#xff0c;求出一个数在前i位数组成的数字能被i整除。假设存在输出这个数&#xff0c;假设不存在。输出-1. 思路&#xff1a;回溯&#xff0c;每次放第i位&#xff0c;然后推断是否符合题意。这题踩着时间过去的2.6s&#xff08;看了…

2008找回企业久违的网速

曾几何时&#xff0c;单位上网访访问页面也是忽忽的&#xff0c;等待10秒简直是不可忍受&#xff1b;曾几何时&#xff0c;公司网络下载是嗖嗖的&#xff0c;转眼已是2M开外&#xff1b;曾几何时&#xff0c;办公室上网看视频是杠杠的&#xff0c;那流畅那画面都快赶上电视直播…

发现一个windows7(32bit或64bit)DirectUI的bug

前段时间发现一个windows7的一个bug&#xff0c;不是什么严重的问题&#xff0c;我在此记录下。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 重现步骤如下: 0 在文件夹的“更改您的视图”中选择下图中用红色叉叉标记的项 1 新建一个文件夹名为“Cs" 2…

阿里达摩院2020趋势第一弹:感知智能的“天花板”和认知智能的“野望”

作者 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“感知智能与认知智能是相辅相成的关系。认知智能需要感知系统来进行信号处理和概念识别&#xff0c;而感知系统也需要认知系统的反馈来决定如何进行更有效的提取和识别。”1月2日&#xff0c;阿里巴巴达摩…

Java 对synchronized的补充Lock锁

Java并发编程&#xff1a;Lock 从Java 5之后&#xff0c;在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问&#xff0c;那就是Lock。 也许有朋友会问&#xff0c;既然都可以通过synchronized来实现同步访问了&#xff0c;那么为什么还需要提供Lock&#xff1…

有奖评选 | 2020年的AI技术公开课,你想听到哪些干货?

CSDN技术公开课有奖评选开始啦~~听过课的小伙伴们&#xff0c;哪位讲师的分享让你获益匪浅&#xff1f;记得给TA投票哦&#xff01;投票后获取入群方式&#xff0c;参与抽奖&#xff0c;奖品很丰厚哦~~进入付费时代&#xff0c;如今我们看似只要招招手&#xff0c;一切知识随手…

一个分析“文件夹”选择框实现方法的过程

在软件开发中&#xff0c;我们如果存在“导入导出”的场景时&#xff0c;难免会用到“文件夹”选择框。之前一直没有太关注过这个的实现过程。最近在工作中遇到了一些问题&#xff0c;我做了一些研究。在此记录下研究的过程。&#xff08;转载请指明出于breaksoftware的csdn博客…

Openssl req命令

一、简介 req指令用来创建和处理PKCS#10格式的证书 二、语法 openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-out filename] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-nodes] [-subject] [-passin arg] [-passout arg] [-key filename] [-key…

使用windbg抓取崩溃文件和分析的过程

在软件编程中&#xff0c;崩溃的场景比较常见的。且说微软技术再牛X&#xff0c;也是会出现崩溃的场景。网上有一段Win98当着比尔盖茨蓝屏的视频非常有意思。 &#xff08;转载请指明出于breaksoftware的csdn博客&#xff09;我们身边的很多软件都引入了dump生成和收集机制。但…

TF 2.1.0-rc2发布,2020年停止支持Python 2

作者 | 神经星星来源 | HyperAI超神经&#xff08;ID:HyperAI&#xff09;【导读】2020 年 1 月 1 日&#xff0c;Python 2 停止维护&#xff0c;正式退休。Python 3 全面登场的时刻&#xff0c;TensorFlow 也在悄悄改变。近日 TensorFlow 官方 GitHub 账号中&#xff0c;发布了…

重新认识笔记本锂电池的保养

重新认识笔记本锂电池的保养 对于笔记本电脑来说&#xff0c;电池可以说是一个比较重要的部件&#xff0c;它的效能直接关系到笔记本电脑在缺少电源的环境中的工作能力。而电池在笔记本电脑的众组件中又算是一个不折不扣的消耗品&#xff0c;因此涉及到笔记本电脑电池的保养和合…

nginx转发及后端服务器获取真实client的IP

针对nginx的模块介绍可以查阅wiki:http://wiki.nginx.org/Modules常用模块&#xff1a;HTTP CoreProxyRewriteUpstream 原理&#xff1a;squid&#xff0c;varnish以及nginx等&#xff0c;在做反向代理的时候&#xff0c;因为要代替客户端去访问服务器&#xff0c;所以&#xf…

AJAX的组成应用

表示层XHTMLCSS 动态显示和数据 DOM (文档对象模型)数据交互和操作 XML,XSLT 异步数据获取 XMLHttpRequest 绑定和处理数据 JavaScript XMLhttpRequest对象属性:Number readyState 4 表示完成Function onreadystatechange 回调函数string responseText XMLDocument responseXM…

打开,保存文件框的文本溢出排查

工作中遇到的这个问题还是很有意思的。其中嵌套了很多奇葩性的问题。 &#xff08;转载请指明出于breaksoftware的csdn博客&#xff09;我们来看下故事的发生过程&#xff0c;QA同学发现我们存在如下的bug 看到如此多的串&#xff0c;可以认为这个是典型的溢出问题。后来我咨询…

2020年,为什么说入坑AI是最好的时机?

2019年可以说是AI全面落地和商用的一年&#xff0c;产业智能化成为各个行业重点关注的发展方向&#xff0c;交通、工业、农业、医疗等主流行业无一例外。随着人工智能技术的进一步发展和落地&#xff0c;深度学习、数据挖掘、自动程序设计等领域也将在更多应用场景中得到实现。…

IIS 伪静态配置(安装ISAPI_Rewrite配置)

第一&#xff1a;首先到官方网站下载ISAPI_Rewrite 我的机子是32位的就下32位免费版的&#xff0c;链接地址如下&#xff1a; http://www.helicontech.com/download/isapi_rewrite/ISAPI_Rewrite3_0064_Lite.msi 可以选择不同版本&#xff1a;http://www.helicontech.com/downl…

Github标星24k,127篇经典论文下载,这份深度学习论文阅读路线图不容错过

作者 | Floodsung翻译 | 黄海广来源 | 机器学习初学者(ID&#xff1a;ai-start-com&#xff09;【导读】如果你是深度学习领域的新手&#xff0c;那么你可能会遇到的第一个问题是“我应该从哪篇论文开始阅读&#xff1f;”本文就是一篇深度学习论文的阅读路线图&#xff01;该…

c/c++面试

1. static在c&#xff0c;c中有什么不同点2. 堆和栈的区别3. 纯虚函数4. 指针和引用的区别5. 如果构造函数出错&#xff0c;如何处理&#xff1f;6. 对设计模式是否熟悉&#xff0c;用过哪些&#xff1f;7. c如何使用c中的函数&#xff0c;为什么&#xff1f;整理&#xff1a;1…

一种解决启动进程传递参数过长的方法

工作中&#xff0c;QA同学在测试我们程序的时候&#xff0c;发现在XP下&#xff0c;我们的A进程无法启动我们的B进程。而在Win7 64bit系统下功能正常。RD同学调试后&#xff0c;发现我们A进程中使用ShellExcute去启动了B进程&#xff08;转载请指明出于breaksoftware的csdn博客…

Ubuntu“无法获得锁\加锁”解决方案

2019独角兽企业重金招聘Python工程师标准>>> 当你添加了源&#xff0c;更新源的时候&#xff0c;如果中途中断了更新&#xff0c;安装软件或者再次更新的时候就是出现如下提示&#xff0c; E: 无法获得锁 /var/lib/apt/lists/lock – open (11: 资源暂时不可用) E: …

一步一步学Silverlight 2系列(3):界面布局

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

一种准标准CSV格式的介绍和分析以及解析算法

CSV是一种古老的数据传输格式&#xff0c;它的全称是Comma-Separated Values&#xff08;逗号分隔值&#xff09;。出生在那个标准缺失的蛮荒年代&#xff0c;CSV的标准一直&#xff08;到2005年&#xff09;是NULL——世间存在着N种CSV格式&#xff0c;它们自成体系&#xff0…

新战场路在何方——详解360金融数据中台之旅

作者 |360金融架构总监黄建庭出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文为CSDN即将推出的《新战场&#xff1a;决胜中台》专刊的第 4 篇文章。自阿里巴巴引入中台概念后&#xff0c;市场对中台的关注度持续“高烧”不退。作为企业的基础平台&#xff0c;数据…

oracle中的exists 和not exists 用法详解

有两个简单例子&#xff0c;以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.aT2.a) ; T1数据量小而T2数据量非常大时&#xff0c;T1<<T2 时&#xff0c;1) 的查询效率高。 2) select * from T1 where T1.a in (select…