Java语言程序设计(原书第8版)--基础篇 注意(二)

掌握Java语言基本且必备的知识点,在实践中运用并总结!
34.在Java中,带返回值的方法也可以当作语句调用。这种情况下,函数调用者只需忽略返回值即可。虽然这种情况很少见,但是,如果调用者对返回值不感兴趣,这样也是允许的。
35.方法能够带来代码的共享和重用。除了可以在testMax中调用max方法,还可以在其他类中调用它。如果创建了一个新类,可以通过使用“类名.方法名”(即TestMax.max)来调用max方法。
36.void方法不需要return语句,但它能用于终止方法并返回到方法的调用者。它的语法是:return;
这种用法很少,但是对于改变void方法中的正常流程控制是很有用的。例如:当分数是无效只时,下列代码就用return语句结束的函数。
public static void printGrade(double score) {
    if (score < 0 || score > 100) {
         System.out.println(“Invalid score”);
         Return;
    }
    if (score > 90.0) {
        System.out.println(“A”);
    }
    else if (score > 80.0) {
        System.out.println(“B”);
    }
    else if(score > 70.0) {
        System.out.println(“C”);
    }
    else if(score > 60.0) {
        System.out.println(“D”);
    }
    else {
        System.out.println(“F”);
    }
}
37.为了简便,Java程序员经常说将实参x传给形参y,实际含义是指将x的值传递给y。
38.被重载的方法必须具有不同的参数列表。不能基于不同修饰符或返回值类型来重载方法。
39.有时调用一个方法时,会有两个或更多可能的匹配,但是,编译器无法判断哪个是最精确的匹配。这称为歧义调用(ambiguous invocation)。歧义调用会产生一个编译错误。考虑如下代码:
public class AmbiguousOverloading {
    publicn static void main(String[] args) {
        System.out.println(max(1, 2));
    }
    public static double max(int num1, double num2) {
        if(num1 > num2)
            return num1;
        else
            retunrn num2
    }
    public static double max(double num1, int num2) {
        if(num1 > num2)
            return num1;
        else
            retunrn num2
    }
}
max(int,double)和max(double ,int )都有可能与max(1,2)匹配。由于连个方法谁也不比谁更精确,所以这个调用是有歧义的,它会导致一个编译错误。
39.并非所有的类都需要main方法。Math类和JOptionPane类都没有main方法。这些类中所包含的方法主要是为了供其他类使用。
40.方法抽象将程序模块化为整齐、层次明显的形式。将程序写成由简洁的方法构成的集合,比其他方式更容易编写、调试、维护和修改。这样的编写风格也会提高方法的可重用性。
41.也可以用elementType arrayRefVar[ ](元素类型 数组引用变量[ ] )声明数组变量,这种来自C语言的风格被Java采纳以适用于C程序员。推荐适用elementType[ ] arrayRefVar(元素类型[ ]  数组引用变量)风格。
42.一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引用。严格地讲,一个数组变量和一个数组是不同的,单多数情况下,他们的差别可以忽略的。因此,为了简化,通常可以说myList是一个数组,而不用更长的陈述:myList是一个含有10个double型元素数组的引用变量。
43.arraycopy方法违反了Java命名习惯。很具命名习惯,该方法应该命名为arrayCopy(即字母C大写)。
44.前面的语句使用下述语法创建数组:
new elementType[ ] {value0, value1, …, valuek}; (new数据类型[ ] { 值0, 值1,···,值接量k};)
该数组没有显示地引用变量,这样的数组称为匿名数组(anonymous array)。
45.JVM将数组存储在一个称作堆(heap)的内存区域中,堆用于动态内存分配,在堆中内存块可以按随意的顺序分配和释放。
46.线性查找法适用于在小数组或没有排序的数组中查找,但是对于数组而言效率不高。二分查找的效率较高,但它要求数组已经排好序。
47.使用语法new int[5][]创建数组时,必须指定第一个下标。语法new int[] []是错误的。
48.也可能会有不止一对具有相同最小距离的点对。程序找到这样的一对点。可以在编程练习题7.8中修改这个程序,找出所有距离最短的点对。
49.如果没有打开电视,那么频道和音量都没有改变。在改变它们中的任何一个之前,要检查它的当前值以确保它在一个正确的范围内。
50.从表面上看,对象引用变量似乎存放了一个对象,但事实上,它只是包括了对该对象的引用。严格地讲,对象引用变量和对象是不同的,但是大多数情况下,这种差异是可以忽略的。因此,可以简单地说myCircle是一个Circle对象,而不用冗长的描述说,myCircle是一个包含对Circle对象的引用变量。
51.在Java中,数据被看作是对象。数组是用new操作符创建的。一个数组变量实际上是一个包含数组引用的变量。
52.大多数时候,我们创建一个对象,然后,会将它赋值给一个变量。接下来,就可以使用这个变量来引用对象。有时候,一个对象在创建之后并不需要引用。这种情况下,可以创建一个对象,而并不将它明确赋值给一个变量,如下所示:
new Circle();
或者
System.out.println(“Area is ” + new Circle(5).getArea());
前面的语句创建了一个Circle对象。后面的语句创建了Circle对象,然后调用它的getArea方法返回其面积。这种方式创建的对象称为匿名对象(anonymous object)。
53.如图8-8所示,执行完赋值语句c1 = c2 之后,c1指向c2所指的同一个对象,c1以前引用的对象就不再有用,因此现在它就成为垃圾(garbage)。垃圾会占用内存空间。Java运行系统会检测垃圾并自动回收它所占的空间,这个过程称为垃圾回收(garbage collection)。
54.产生相同随机值序列的能力在软件测试以及其他许多应用中是很有用的。可以在使用不同随机数序列之前,使用固定的随机序列以测试程序是否正确。
55.包可以用来组织类。为了完成这个目标,需要在程序中首先出现下面这行语句,在这行语句之前不能有注释也不能有空白:
package packageName;
如果定义类时没有声明包,就表示把他放在默认包中。
Java建议最好将类放入包中,而不要使用默认包。但是,本书为了简化问题,使用的是默认包。关于包的更多的信息,参见补充材料III.G.
56.大多数情况下,构造方法应该是公共的。但是,如果想防止用户创建类的实例,就该使用私有构造方法。例如:因为Math类的所有数据域和方法都是静态的,所以没必要创建Math类的实例。为了防止用户从Math类创建对象,在java.lang.Math中的构造方法定义为如下所示:
private Math(){
}
57.通俗地讲,get方法称为读取器(getter)(或访问器(accessor)),而set方法称为设置器(setter)(或修改器(mutator))。
58.当使用new操作符创建对象数组后,这个数组中的每个元素都是默认值为null的引用变量。
59.String变量存储的是对String对象的引用,String对象里存储的才是字符串的值。严格地讲,术语String变量、String对象和字符串值是不同的。但在大多数情况下,它们质检的区别是可以忽略的。为简单起见,术语字符串通常用来指String变量、String对象和字符串的值。
60.如果两个字符串相等,equals方法返回true;如果它们不等,方法返回false。compareTo方法会根据一个字符串是否等于、大于或小于另一个字符串。分别返回0、正整数或负整数。
61.使用一个字符串时,往往是知道它的直接量的。为了方便起见,Java允许在不创建新变量的情况下,使用字符串直接量直接引用字符串。这样,”Welcome to java“.charAt(0)是正确的,它返回W。
62.在计算机内部,字符串的值是用私有数组变量表示的。数组是不能从String类的外部访问的。String类提供了许多像length() 和charAt(index)这样的公共方法以获取该数组的信息。这是一个关于封装的很好的例子:类的数据域通过私有修饰符对用户进行隐藏,这样,用户就不能直接操作数据域。如果数组不是私有的,用户就能通过修改数组而改变字符串的内容,这就会违反String类不可变的原则。
63.如果beginIndex就是endIndex,那么substring(beginIndex, endIndex)就会返回一个长度为0的空字符串。如果beginIndex>endIndex,那就会出现运行错误。
64.可以使用Double.parseDouble(str)或者Integer.parseInt(str)将一个字符串转换成double型值或int型值。
65.字符串的长度总是小于或等于生成容器的容量。长度是存储在生成器中的字符串的实际大小,而容量是生成器的当前大小。如果有更多的字符添加到字符串生成器,超出它的容量,则生成器的容量就会自动增加。在计算机内部,字符串生成器是一个字符数组,因此,生成器的容量就是数组的大小。如果超出生成器的容量,就用新的数组替换现有数组。新数组的大小为2 × (前一个数组的长度+1)。
66.如果运行程序时没有传递字符串,那么使用new String[0] 创建数组。这种情况下,该数组是长度为0的空数组。args是对这个空数组的引用。因此,args不是null,但是args.length是0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值