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 在这八个类名中。除了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++不同)的更多相关文章
- String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的 值不会改变原始的值. 如果参数类型是引用类型,那 ...
- 关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用
今天面试了一家公司的java开发方面的实习生,被问到一个问题:如何处理java中的内存泄露问题,保证java的虚拟机内存不会被爆掉,当时其实觉得面试官的问题有点泛,所以也没有很好领会他的意思,答案也不 ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- 理解Java的引用对象
SoftReferenceWeakReference 的特性基本一致, 最大的区别在于 SoftReference会尽可能长的保留引用,不会在GC时就回收对象,而是直到JVM 内存不足时才会被回收(虚 ...
- Java 语言中 Enum 类型的使用介绍
Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...
- Java中的枚举类型详解
枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...
- js常用API 数据类型 基本类型,基本包装类型,引用类型 Object String Array Boolean Number Date Math
数据类型 变量.作用域及内存 基础类型(primitive value):Undefined.Null.Boolean.Number和String.这些类型在内存中分别占用固定大小的空间,他们的值保存 ...
- java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...
- Java中引用的详解
Java中没有指针,到处都是引用(除了基本类型).所以,当然,你肯定知道java的引用,并用了很久,但是是不是对此了解地比较全面?而这些引用有什么作用,且有什么不同呢?Java中有个java.lang ...
随机推荐
- windows phone (21) Grid元素的Background和Clip
原文:windows phone (21) Grid元素的Background和Clip Grid是唯一可以在内部定制单元格的panel类,我们可以在grid中定制单元格,然后通过grid.row和g ...
- 浅谈新一代Android操作系统Android L
今天早一些的时候,Google公布了新一代Android操作系统Android L.让我很意外的是命名规则的变化,之前外界纷纷推測会叫Android5.0,同一时候会给一个甜品的名字命名.由于Andr ...
- usb host鼠标不能使用原因
linux kernel 3.4.5的板子插入USB鼠标,出现例如以下错误LOG: [ 191.177508] Plug in USB Port2 [ 191.363516] usb 1-1: n ...
- 通过openssh远程登录时的延迟问题解决
Linux下的ssh 服务器一般用的都是open-ssh,可是发现有些时候通过ssh连接服务器时总会有大概10秒钟左右的延迟. 一开始以为是openssh的安全策略,防止端口扫描,后来发现自己想多了. ...
- doc-remote-debugging.html
https://studio.zerobrane.com/doc-remote-debugging.html
- nyoj 117 找到的倒数 【树阵】+【分离】
这个问题的解决方案是真的很不错!!! 思路:建立一个结构体包括val和id. val就是输入的数,id表示输入的顺序.然后依照val从小到大排序.假设val相等.那么就依照id排序. 假设没有逆序的话 ...
- Java栈的实例-数组和链表两种方法(转)
一.栈 栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom). (2)当表中没有元素时称为空栈. ...
- 走进C的世界-那些年我们常犯的错---keyword相关
近期一段时间參加一些面试,发现非常多细节的问题自己已经变得非常模糊了.对一些曾经常常遇到的错误.如今也说不出原因了. 而且在编码过程中也相同犯这些错误. 特别写一个博客来记录这些我们常常遇到的错误.自 ...
- HTML的标签使用
<p>段落标签</p>:段落标签 <hx>标题标签</hx>:标题标签,x代表1-6 <em>斜体</em>:显示的字体是斜的 ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...