Java 基础知识汇总
本篇内容来自《Java核心技术》
——第三章——
String类没有提供用于修改字符串的方法。Java文档将String对象成为不可变字符串。
可以修改字符串变量greeting,让它引用另外一个字符串。
String greeting = "Hello";
greeting = greeting.substring(0,3) + "p!";
数组拷贝
在java中,允许将一个数组变量拷贝给另一个数组变量,这两个变量将引用同一个数组。
int[] smallPrimes = {2,3,4,5,6,7}; int[] luckyNumbers =smallPrimes; luckyNumbers[5] = 12; //now smallPrimes[5] is also 12
将一个数组的所有值拷贝到一个新数组中去
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
——第四章——
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。
识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
类之间的关系
依赖(use-a):如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。应该尽可能地让类之间的耦合度最小。
聚合(has-a):聚合关系意味着类A的对象包含类B的对象。
继承(is-a):是一种用于表示特殊与一般关系的。
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。
注意不要编写返回引用可变对象的访问器方法,如果需要返回一个可变对象的引用,应该先对它进行克隆。
class Employee { ... public Date getHireDay() { return (Date) hireDay.clone(); //对象clone是指存放在另一个位置上的对象副本 } }
对于私有方法,如果改用其他方法实现相应的操作,则不必保留原有的方法。私有方法不被外部的其他类操作调用,可以删去;如果方法是公有的,就不能将其删去,因为其他的代码很可能依赖它。
——第五章——
final实例域,构建对象时必须初始化这样的域,即必须确保在每一个构造器执行之后,这个域被设置。final修饰符应用于基本类型域或不可变类的域。
按...调用是一个标准的计算机科学术语,用来描述各种程序设计语言中方法参数的传递方式,Java程序设计语言对对象采用的不是引用调用,对象引用是按值传递的。
Java中方法参数的使用情况:
一个方法不能修改一个基本数据类型的参数
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
调用构造器的具体处理步骤:
1) 所有数据域被初始化为默认值
2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
4)执行这个构造器的主体
Sun公司建议将公司的因特网域名以逆序的形式作为包名,并且对于不同的项目使用不同的子包。从编译器的角度来看,嵌套的包之间没有任何关系,例如java,util包与java.util.jar包毫无关系,每一个都拥有独立的类集合。
super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。
典型的枚举类型例子
public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
可以在枚举类型中添加一些构造器,方法和域,构造器只在构造枚举常量的时候被调用。
public enum Size { SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL"); private Size(String abbreviation) { this.abbreviation = abbreviation; } public String getAbbreviation() { return abbreviation; } private String abbreviation; }
——第六章——
Arrays类中的sort方法可以对对象数组进行排序,但要求满足:对象所属的类必须实现Comparable接口。
public interface Comparable { int compareTo(Object other); }
例如在实现Comparable<Employee>接口的类中,必须提供下列方法
int compareTo(Employee other)
为什么不能在Employee类中直接提供一个compareTo方法,而必须实现Comparable接口?
主要原因在于Java是一种强类型语言,在调用方法时,编译器会检查这个方法是否存着。编译器必须确认a[i]一定有compareTo方法,如果a是一个Comparable对象的数组,就可以确保拥有compareTo方法,因为每个实现Compareble接口的类都必须提供这个方法的定义。
在sort方法中可能存在下面语句:
if(a[i].compareTo(aj]>0) { //rearrange a[i] and a[j] ... }
接口特性:
接口不是类,不能使用new运算符实例化一个接口,却能声明接口的变量。
和使用instanceof检查一个对象是否属于某个特定类一样,可以使用instance检查一个对象是否实现某个特定接口。
与可以建立类的继承关系一样,接口也可以被扩展。
接口中不能包含实例域或静态方法,但却可以包含常量
public interface Powered extends Moveable { double milesPerGallon(); double SPEED_LIMIT = 95; }
与接口中的方法都自动被设置为public一样,接口中的域将被自动设为public static final。
优质内容筛选与推荐>>