Java|Java基础整理(全是干货)( 三 )



也就是仍然是比较其地址 。
2.若重写其方法:
在String中:
源代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;

if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[
= value;
char v2[
= anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i
!= v2[i
)
return false;
i++;

return true;


return false;

可以看出equals()是会先用==方法 , 然后比较两个String的值是否相等 。
九.final , static关键字
final:
当用final修饰一个类时 , 表明这个类不能被继承 , 比如出于安全的考虑 , 可修饰为final 。
如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的 。
对于一个final变量 , 如果是基本数据类型的变量 , 则其数值一旦在初始化之后便不能更改;如果是引用类型的变量 , 则在对其初始化之后便不能再让其指向另一个对象 。
static:
修饰类的成员变量时 , 每个类只有一个这个成员 , 而不是每个类的实例化对象都有一个这个变量 。
用static修饰后 , 类名.方法名 , 类名.属性名 , 可直接调用 , 不用实例化对象 , 避免了先要new出对象的繁琐和资源消耗 。
在创建对象时 , static修饰的成员会首先被初始化 。
十.sleep() 和 wait() 有什么区别?
sleep就是正在执行的线程主动让出cpu , cpu去执行其他线程 , 在sleep指定的时间过后 , cpu才会回到这个线程上继续往下执行 , 如果当前线程进入了同步锁 , sleep方法并不会释放锁 , 即使当前线程使用sleep方法让出了cpu , 但其他被同步锁挡住了的线程也无法得到执行 。 wait是指在一个已经进入了同步锁的线程内 , 让自己暂时让出同步锁 , 以便其他正在等待此锁的线程可以得到同步锁并运行 , 只有其他线程调用了notify方法(notify并不释放锁 , 只是告诉调用过wait方法的线程可以去参与获得锁的竞争了 , 但不是马上得到锁 , 因为锁还在别人手里 , 别人还没释放 。 如果notify方法后面的代码还有很多 , 需要这些代码执行完后才会释放锁 , 可以在notfiy方法后增加一个等待和一些代码 , 看看效果) , 调用wait方法的线程就会解除wait状态和程序可以再次得到锁后继续向下运行 。
十一.得到文件下的文件
public static void FileRead(String path)throws Exception{
File f= new File(path);
if(!f.exists())
System.out.println(\"file not exist\");
if (f.isDirectory()) {
File[
ss = f.listFiles();
for (File s : ss) {
System.out.println(s.getPath()); // F:\\txt\\1.txt

else{
System.out.println(f.getName());


十二.实现多线程的三种方法
1.继承thread类创建线程
public class MyThread extends Thread {
public void run() {
System.out.println(\"MyThread.run()\");


MyThread myThread1 = new MyThread();
myThread1.start();
2.实现runnable接口创建线程
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println(\"MyThread.run()\");


3.实现Callable接口通过FutureTask包装器来创建Thread线程
PS:别说四种 , 第四种无法理解
十三.抽象类与接口的区别
主要是:单继承(抽象类) , 多实现(接口) 。
抽象类不能直接实例化对象 , 需要继承抽象类才能实例化其子类 。
从使用上来看 , 一个类可以实现多个接口 , 但是不能继承多个抽象类 。
接口的字段只能是 static 和 final 类型的 , 而抽象类的字段没有这种限制 。
接口的成员只能是 public 的 , 而抽象类的成员可以有多种访问权限 。
十四.String Pool