新濠天地 > 编程网新闻 > 而在finally中对该引用数据类型的属性值的改变起

原标题:而在finally中对该引用数据类型的属性值的改变起

浏览次数:160 时间:2019-09-20

先看一段java代码,func返回值为int:

public static int func() {    int result = 0;    try {        result = 1;        return result;    } catch (Exception e) {        result = 2;        return result;    } finally {        result = 3;    }}

正确的返回结果是,func返回1。

原因:
如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:

1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

1.javascript的组成:

DOM:文档对象模型。核心对象:document

BOM:浏览器对象模型。核心对象:window

ECMAScript:定义了js的核心语法

return 是String类型的code:

public static String funcStr() {        String result = "hello";        try {            result = "1";            return result;        } catch (Exception e) {            result = "2";            return result;        } finally {            result = "3";        }    }

该函数返回值为字符串”1”。

2.js中的数据类型:基本数据类型和复杂数据类型、

基本数据类型:*string number Boolean null undefined*

复杂数据类型:Object对象类型

Object Array Date Function RegExp(正则表达式) Number(数值对象) String(字符串对象)Boolean

返回值是引用数据类型:

public static Person funcPerson() {        Person result = new Person(20);        try {            result.age = 30;            return result;        } catch (Exception e) {            result.age = 40;            return result;        } finally {            result.age = 50;        }    }    static class Person {        public int age;        public Person(int age) {            this.age = age;        }    }

该函数的返回类型是resultPerson,age为50,即在finally中更改了有效。

总结:
如果没有异常出现,而且finally语句中没有return,则会执行try里边的return,并且,会将变量暂存起来(对象存的是引用的地址),再去执行finally中的语句,这时候,如果返回值是基本数据类型或者字符串,则finally相当于更改副本,不会对暂存值有影响;但是,如果返回值是对象,则finally中的语句,仍会根据地址的副本,改变原对象的值。所以上边的例子,返回值的age为50。

3.判断数据的类型 typeof

格式:typeof 数值(变量)

结果:typeof 字符串 //string

           typeof 数值  //number

           typeof true/false    //boolean

           typeof undefined    //undefined

           typeof null          //object

           typeof 复杂数据类型  //object

           typeof 函数          //function

注意:typeof本身是操作符,不是函数

typeof本身有返回值,返回值是字符串类型

null和undefined的区别:

undefined:声明了变量,但未赋值

null:变量的值永远不会为null,除非手动设置

4.逻辑运算符

逻辑非(!表达式):返回值     Boolean

逻辑与(表达式1 && 表达式2):返回值     其中的某个表达式、

判定:检查表达式1是否为真,若为真,返回表达式2;否则返回表达式1

逻辑非(表达式1 || 表达式2):  返回值    其中的某个表达式

判定:检查表达式1是否为真,若为真,返回表达式1;否则返回表达式2

5.值类型和引用类型

值类型:string,number,Boolean,undefined,null

引用类型:(object类型) function,Array,Date,String

值类型和引用类型的区别:

i.存储的位置不同。

值类型存储在栈中,值类型变量,栈中存储的就是该变量的值。

引用类型存储在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址。

ii.值传递和引用传递不同。

值传递相当于拷贝值,虽然两个变量的值一样,但两个变量在栈中的存储空间不同,所以是不同的。

引用传递不一样,引用类型包含的是对上数据区域地址的引用,相当于指针,指的是同一块内存区域。因此当其中一个引用的值发生了变化,另一个指向该内存中的值也会发生改变。

新濠天地,注意:javascript中,字符串为值类型。但,字符串在复制和传递运算中,以引用型数据的方法做处理!!

6.in关键字的使用

作用:(1)遍历对象;(2)检测对象中是否存在指定的属性    语法: “属性” in 对象        返回值:boolean

注意:属性必须是字符串

在操作数组是,key--索引, value--元素、

7.delete

作用:(1)删除对象中的属性;(2)删除没有使用var声明的变量

注意:(1)返回值为Boolean;

(2)不能删除没有使用var声明的全局变量,但却可以删除直接定义在window上的属性

(3)删除不存在的属性没有反应,返回值为true

8.javascript错误-throw,try和catch

try语句:   测试代码块的错误

catch语句:   语句处理错误

throw语句:   创建自定义错误(throw errObj)

errObj必须是一个Error对象或Error的子类型.

基本语法:

try{

//此处是可能产生例外的语句

}catch(error){

//此处是负责例外处理的语句

}finally{

//此处是出口语句

}

上面的代码中.try块的语句首先被执行.如果运行中发生了错误,控制就会转移到位于catch块中语句,其中括号中的error参数被作为例外变量传递. 否则,catch语句就跳过不执行. finally语句在try和catch语句执行完后执行.

(1)Error对象:name属性表示例外的类型,message属性表示例外的含义.根据这些属性的取值,可以决定处理例外的方式.

Error.name的取值一共有六种:

Error:()的使用与定义不一致

RangeError:数据越界

ReferenceError:非法或不能识别的引用数值

SyntaxError:发生语法解析错误

TypeError:操作数类型错误

URIError:URI处理函数使用不当

本文由新濠天地发布于编程网新闻,转载请注明出处:而在finally中对该引用数据类型的属性值的改变起

关键词:

上一篇:使用ggplot2绘制箱线图

下一篇:最佳的办法是安装brew