一个: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   在这八个类名中。除了Integer和Character类以后,其他六个类的类名和基本数据类型一直,仅仅是类名的第一个字母大写就可以。

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

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

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

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

1、实现int和Integer类之间的转换

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

int n = 10;

Integer in = new Integer(100);

//将int类型转换为Integer类型

Integer in1 = new Integer(n);

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

int m = in.intValue();

2、Integer类内部的经常用法

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

a、parseInt方法

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);

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

b、toString方法

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……

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

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

  1. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

    <Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...

  2. C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针

     目 录 1      开始学习C++............................................................................... ...

  3. Java中的值类型:为什么它们不可变?

    值类型不必是不变的. 但是他们是. 在上一篇文章中,我讨论了Java中指针与引用之间的区别以及如何传递方法参数(按值传递或按引用传递). 这些与Java中尚不存在的值类型密切相关(尚未). John ...

  4. java基本类型与包装类型

    基本数据类型:byte,int,       short, long, boolean,char,       float,double等 包装类型     : Byte,Integer,Short, ...

  5. Java之主数据类型的包装

    所谓的主数据类型的包装,就是需要以对象的方式来处理primitive主数据类型时,就把它包装起来,这个的前提是Java 5.0以上的版本.每一个primitive主数据类型都有个包装用的类,且因为这些 ...

  6. Java中的对象类型像引用还是指针,谁是谁非?

    Java中的对象类型像引用还是指针,谁是谁非? 作者:海枫 地址:http://blog.csdn.net/linyt 作为一名程序员,我们应该对新知识和新技术刨根问底,而不应泛泛而谈.我未曾接触到J ...

  7. java包装类有几种_Java包装类型有几种

    Java包装类型有8种,分别是:1.Byte:2.Integer:3.Short:4.Long:5.Float:6.Double:7.Boolean:8.Character. [相关学习推荐:java ...

  8. Java中有了基本类型为什么还要有包装类型(封装类型)

    Java中基本数据类型与包装类型有: 基本类型 包装器类型 boolean Boolean char Character int Integer byte Byte short Short long ...

  9. java中有scoreframe类型嘛_java构造函数的三种类型总结

    我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论.目前有三种类型:无参.有参和默认.根据不同的参数情况,需要我们分别进行构造函数的讨论.这里重点是无参构造函数的初始化也要分两种方法进行分析 ...

最新文章

  1. 【三个臭皮匠】第一次网络会议记录
  2. 1000行python代码_GitHub - kill1000/LearnPython: 以撸代码的形式学习Python
  3. 计算机网络应用和计算机应用有什么区别,什么是计算机网络技术?和计算机应用技术区别...
  4. UA MATH566 统计理论 位置-尺度参数族
  5. 对接口运用扩展方法 Applying Extension Methods to an Interface 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-15...
  6. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令
  7. 一种Android闪屏页实现方法(偏门别类)
  8. 少儿德国奎尔鱼油(QÜELL FISH OIL FOR JUNIOR )
  9. LeetCode 717. 1-bit and 2-bit Characters
  10. mysql replace update_mysql的replace,存在更新,不存在插入
  11. RPM、SRPM和YUM,linux包rpm包管理工具
  12. 笔记本计算机内部部件,笔记本内部硬件构造有哪些
  13. SCL教程之如何使用SCL创建简单控制程序
  14. word制表符怎么设置(word制表符详细教程)
  15. 企业信息安全类证书有哪些?
  16. 一个简单的ZUI多文件上传的demo和sql练习
  17. 文献检索与论文写作——学习笔记
  18. cve-2019-0708漏洞复现
  19. WebRTC::FEC
  20. 计算机打印机共享无法连接不上,电脑共享打印机连接不上怎么办? 爱问知识人...

热门文章

  1. 2.8 FSM之Moore和Mealy part3
  2. [转]大三下,我们该做什么?一篇被转万次的日志,你值得一看
  3. XML DTD 语言学习笔记
  4. qt练习11 鼠标,按键,滚轮事件学习
  5. Mybait缓存机制
  6. Elam的git笔记:(二)git的安装与基本操作介绍
  7. Composer 篇
  8. 固态硬盘驱动器在设计上有个安全漏洞 易导致数据损毁
  9. 5.JasperReports学习笔记5-其它数据生成动态的报表(WEB)
  10. 查询远程或本地计算机的登录账户