引用类型

java知识回顾

佐手、 提交于 2019-12-20 20:24:24
一、构造方法能不能被继承   当然不能,1.构造方法是类的唯一入口        2.构造方法与类名相同        3.子类构造方法中隐式的调用了父类的构造方法 二、值传递和引用传递、不变类和可变类、直接赋值和浅拷贝和深拷贝    1.直接赋值:在java中,对象的传递、方法参数的传递(将实参赋值给行参)多数是通过=来直接赋值的 值传递是值的copy 引用传递是引用的copy,即内存地址的copy 引用传递又分两种 1.如果是不变类 对引用的操作不会改变原引用地址,但会改变现引用地址的值,他们指向不同的对象(new对象除外)    2.如果是可变类 对引用的操作不会改变原引用地址,但会改变对象的值,他们指向的是同一个对象(new对象除外)            3.不管是可变不可变,只要使用new来重新赋值,则是一个新的引用与对象,不会修改原来的引用与对象 2.浅拷贝:对象实现cloneable接口,重写clone类,可以拷贝对象内的基本数据类型以及不变类型,引用类型不会被拷贝    3.深拷贝:对象中的引用类型也实现cloneable接口。。。         修改引用时new新的对象,如get、set时         序列化(腌酸菜、冷藏)    可变类:提供修改自身的方法,不可变类:要修改对象时必须new一个对象,如 String、基本类型的包装类、BigInteger

C++的引用类型

北城以北 提交于 2019-12-20 09:37:49
c++比起c来除了多了类类型外还多出一种类型:引用。这个东西变量不象变 量,指针不象指针,我以前对它不太懂,看程序时碰到引用都稀里糊涂蒙过去。 最近把引用好好地揣摩了一番,小有收获,特公之于社区,让初学者们共享。 引用指的是对一个对象的引用。那么什么是对象?在c++中狭义的对象指的是 用类,结构,联合等复杂数据类型来声明的变量,如 MyClass myclass,CDialo g mydlg,等等。广义的对象还包括用int,char,float等简单类型声明的变量 ,如int a,char b等等。我在下文提到“对象”一词全指的是广义的对象。c++ 的初学者们把这个广义对象的概念建立起来,对看参考书是很有帮助的,因为大 多数书上只顾用“对象”这个词,对于这个词还有广义和狭义两种概念却只字不 提。 一。引用的基本特性 首先让我们声明一个引用并使用它来初步认识引用。 例一: 1。 int v,k,h; 2。 int &rv=v; 3。 rv=3; //此时v的值也同时变成了3。 4。 v=5; 5。 k=rv+2; //此时k=5+2=7。 6。 h=12; 7。 rv=h; 8。 rv=20; 第1句声明了三个对象(简单变量)。 第2句的意思是:声明了一个引用,名字叫rv,它具有int类型,或者说它是 对int类型的引用,而且它被初始化为与int类型的对象v“绑定”在一起。此时r

C#中值类型和引用类型

廉价感情. 提交于 2019-12-19 11:39:15
概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。 2.引用类型:表示指向存储在内存堆中的数据的 指针或引用 (包括类、接口、数组和字符串)。 C#中定义的值类型包括原类型( Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal )、枚举( enum )、结构( struct) 引用类型包括:类、数组、接口、委托、字符串等。 区别: 基本区别在于它们在内存中的 存储方式 。 值类型 只将值存放在内存中,这些值类型都存储在堆栈中。原始数据类型(如bool和int)都属于此类型。而 引用类型 的内存单元中只存放内存堆中对象的地址,而对象本身放在内存堆中。如果引用的值类型的值是null,则表示未引用任何对象。 堆和堆栈区别 : 堆和堆栈是两个不同的概念,在内存中的存储位置也不相同, 堆一般用于存储可变长度的数据,如字符串类型; 堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型

C#基础之方法和参数

蹲街弑〆低调 提交于 2019-12-19 05:24:35
接上一篇 《C#基础之类型和成员基础以及常量、字段、属性》 实例方法、静态方法 C#中的方法分为两类,一种是属于对象(类型的实例)的,称之为实例方法,另一种是属于类型的,称之为静态方法(用static关键字定义)。大家都是做开发的,这两个也没啥好说的。 唯一的建议就是:你的静态方法最好是线程安全的(这点是说起容易做起难啊……)。 构造器(构造函数) 构造器是一种特殊的方法,CLR中的构造器分为两种:一种是实例构造器;另一种是类型构造器。和其他方法不同,构造器不能被继承,所以在构造器前应用virtual/new/override/sealed和abstract是没有意义的,同时构造器也不能有返回值。 实例构造器 用来初始化类型的实例(也就是对象)的初始状态。 对于引用类型,如果我们没有显式定义实例构造器,C#编译器默认会生成一个无参实例构造器,这个构造器什么也不做,只是简单调用一下父类的无参实例构造器。这里应该意识到, 如果我们定义的类的基类没有定义无参构造器,那么我们的派生类就必须显式调用一个基类构造器 。 class MyBase { public MyBase(string name) { } } class MyClass : MyBase { } 上面的代码会报“MyBase不包含采用0个参数的构造函数”的错误,必须显式调用一个基类的构造器: class MyBase {

js函数的概念及作用 作用域

半腔热情 提交于 2019-12-19 04:46:37
函数的概念和作用 函数 函数对于任何语言来说都是一个核心概念,通过函数可以封装任意多条语句,而且可以在任何地方任何时候调用执行。函数使用 function 关键字声明后面跟一组参数以及函数体。语法如下: function functionName ( arg1 , arg2 ) { // 这里是要执行的代码 } 示例: <!DOCTYPE html> <html> <head> <script> function myFunction(){ alert("Hello World!"); } </script> </head> <body> <button οnclick="myFunction()">点击这里</button> </body> </html> 定义:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。 函数参数 ECMAScript 中函数的参数与大多数其他语言中的函数的参数有所不同,ECMAScript 中的函数不介意你传递多少个参数,也不会在意传递进来的参数是什么数据类型。 在调用函数时,您可以向其传递值,这些值被称为参数。这些参数可以在函数中使用。可以发送任意多的参数,由逗号 (,) 分隔: function

Java中真的只有值传递么?

 ̄綄美尐妖づ 提交于 2019-12-19 04:05:04
Java中真的只有值传递么? (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法。 1、基本类型或基本类型的包装类以及String是值传递,引用类型是引用传递。 2、Java中只有值传递。 关于这个问题应该是存在争议的。根据测试出来的结果和我们自己的经验,以及口口相传或是上学时老师讲的,我们认为是第一种。但第二种说法的呼声也很高,渐渐地我们也认为第2中才是对的。那么下面我们就来分析一下这个问题。 在谈这个问题之前我们先了解值传递和引用传递的概念及现象。我还记得,值传递和引用传递这些概念是大学里学Java的时候老师教给我的,它们的概念是什么呢?老师是通过例子来讲解的,大概是这样的。 值传递 例子1: 1 public static void main ( String[] args ) { 2 TestJavaParamPass() tjpp = new TestJavaParamPass(); 3 int num = 10 ; 4 tjpp.change(num); 5 System. out .println( "num in main():" +i); 6 } 7 public void change ( int param ) { 8 param = 20 ; 9 System.

引用类型(object、array)

萝らか妹 提交于 2019-12-19 01:46:32
1.Object类型   1)创建方法: //使用new加object构造函数 var person = new Object(); person.name = "aaa"; person.age = 29; //对象字面量表示法 var person = { name:"aaa",//注意符号 逗号 age:29 };//注意符号 分号 使用对象字面量语法时,属性名也可以使用字符串 留空花括号 var person = {}; //相当于new Object()   2)访问对象属性:   点表示法(建议使用) alert(person.name);   方括号表示法 将访问的属性用字符串的形式放在方括号内,主要用于处理属性名中包含会导致语法错误的字符(例如空格)以及关键字或保留字 alert(person["name"]); 2.Array类型   数组中的 每一项 可以保存 任何数据类型   数组的大小是可以 动态调整 的,即可以随着数据的添加自动增长以容纳新数据   1)创建方法   使用Array构造函数,其中 new操作符可以省略(小括号) var colors = new Array(); var colors = new Array(20);//创建长度为20的数组,注意不是值为20!!!! var colors = new Array("red");//创建含一项

typeof 运算符能判断哪些类型

て烟熏妆下的殇ゞ 提交于 2019-12-19 01:27:01
typeof 能判断所有的值类型 //typeof 能判断所有的值类型 let a ; console . log ( typeof a ) // undefined const a = 'string' console . log ( typeof a ) // string const a = 1 console . log ( typeof a ) // number const a = true console . log ( typeof a ) // boolean const a = Symbol ( 'a' ) console . log ( typeof a ) // Symbol typeof 能判断是否是函数 //typeof 能判断函数 typeof console . log ( 1 ) // function typeof function fn ( ) { } // function typeof 能判断出是否是引用类型(不可细分) //typeof 判断引用类型 const a = null typeof a //object const a = { a : 100 } typeof a // object const a = [ 'a' ] typeof a // object 结论 typeof 可以判断出所有的值类型 typeof

C#简单的面试题目(一)

与世无争的帅哥 提交于 2019-12-18 15:50:39
1.简述private、protected、public、internal修饰符的访问权限。   private:私有成员,在类的内部才可以访问。   protected:保护成员,该类内部和继承类中可以访问。   public:公共成员,完全公开,没有访问限制。   internal:在 同一个程序集内可以访问.----@无机の剑执政的, 多谢博友 2.private 私有成员会被继承吗?   会,但是不能访问。所以看上去他们似乎是不能继承的,但实际上确实被继承了。 3.C#支持多重继承吗?不支持,但是可以用接口来实现。 4.C#中所有对象共同的基类是什么?Systm.Object。 5.什么是面向对象?   万物都是对象,其主要特征:封装、继承、多态 6.怎样实现多态   1.通过对象直接调用成员函数时,始终默认使用该对象的类的成员函数(除非用::显示指定类名)   2.通过指向对象的指针或引用调用成员函数时,如果该函数是实函数,则调用该指针或引用的类的成员函数;如果该函数是虚函数,则调用该指针或引用指向的对象的类的成员函数。 7.什么是装箱和拆箱?   从值类型接口转换到引用类型为装箱。从引用类型转换到值类型为拆箱。   装箱(boxing)是将值类型转换成引用类型,int i=3;object o=i;这便是装箱过程。   而拆箱(unboxing

JS引用类型总结

情到浓时终转凉″ 提交于 2019-12-18 15:10:27
Object 类型 创建Object实例的方式: var person = new Object(); var person = { name : 'Mike', age : 23 } //属性名可以使用字符串如 'age': 23 Array 类型 创建数组的基本方式: 使用Array构造函数 (new可省略) var ar = new Array() var ar = new Array(3) //给定长度为3 var ar = new Array('red', 'yellow', 'green') 数组字面量表示法 var ar = ['red', 'yellow', 'green'] var ar = [] var ar = [ , , , , ] //错误示范,会创建一个包含4或5项的数组,每一项是undefined length属性: length属性不只是可读的,通过设置length属性可以从数组的末尾移除项或向数组中添加新项,数组最多可包含4294967295个项。 检测数组: value instanceof Array //假设只有一个全局环境 Array.isArray(value) //低版本浏览器尚未实现该方法 Object.prototype.toString.call(array) == '[object Array]' 转换方法: ar