《Java核心技术》笔记之零碎内容以及传递的问题

首先把《Thinking》的前两章一点有意思的东西拿进来。以后会涉及到的就不在这里列出了。
定义一个新类用以下方法:
class ATypeName{
//Class body goes here.
}
可以用new来创建这种类型的对象:
ATypeName a = new AtypeName();
Java用方法来描述子程序,包括:名称、参数、返回值和方法体。
ReturnType methodName(/*Argument list*/){
//Methrod body
}
返回类型描述的是在调用方法之后从方法返回的值。参数列表给出了传给方法的信息类型和名称。方法名和参数列表合成方法签名,是方法的唯一标识。
调用方法:
objectName.methodName(arg1,arg2,arg3);
调用方法的行为通常称为发送消息给对象。
通常来说,当创建类时,就是在描述类的外观与行为。出费用new创建了类的对象,否则实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才共外界调用。

class Letter {
       char c;
}
public class PassObject{
       static void f(Letter y){
              y.c = 'z';
       }
       public static void main(String[] args){
              Letter x = new Letter();
              x.c = 'a';
              System.out.println("1:x.c: "+x.c);
              f(x);
              System.out.println("2:x.c: "+x.c);
       }
}

《Thinking》中介绍f()中实际是传递了一个引用。
《算法》一书(对,就是那个大红本的那本!)介绍的时候提及:方法的参数按值传递。
所以在这里对值传递和引用传递进行一个总结和思考吧。
Pass By Value 和 Pass By Reference 的字面意义其实不值得深究。真正重要的是具体的过程。
首先,基本类型是直接将值保存在栈中的,而引用类型是将地址保存在栈中,对应的实际对象则是保存在堆中。
其次,赋值运算符“=”对于基本类型,是覆盖掉原值。对于引用类型,堆中对象不会改变,只覆盖掉栈中的地址。
参数操作的本质就是赋值操作!
赋值操作:1,放弃了原有的值或者引用;2,得到了 = 右边的值或者引用!
基本数据类型:完整的复制了变量的值,方法之间再无联系。
引用数据类型:赋值了变量的引用,两者同时修改同一个对象。
所以书中例子稍加修改就可以获得不一样的答案:
public class PassObject{
    static void f(Letter y){
    y = new Letter();
    y.c = 'x';
    }

}
这个时候的输出结果就都是a了,而y.c的输出值是x。
这里有个有意思的地方:String类型
void foo(String text) {
text =
"windows";
}
foo(str);
// str 也没有被改变

String类是纯粹的对象,特殊的地方在于有 字符串直接量 和 字符串常量池 和 字符串拼接的运算符重载。每次赋值或者+都是新new了一个String,所以参数传递的时候引用失效。String与基本类型无关,之所以看起来像是基本类型,主要是因为String类是不可变类(构造后不可改变,没有提供可改变自身状态的方法)。

有关命名规范:
包名:全小写
类名:驼峰命名法,每个单词首字母都大写
方法名、参数名:驼峰命名法,首个单词首字母小写
常量名:所有字母大写
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值