包
package
第一:package出现在java源文件第一行。
第二:带有包名怎么编译?javac -d . xxx.java
第三:怎么运行?java 完整类名
补充:以后说类名的时候,如果带着包名描述,表示完整类名。
如果没有带包,描述的话,表示简类名。
java.util.Scanner 完整类名。
Scanner 简类名
import
import什么时候不需要?
java.lang不需要。
同包下不需要。
其它一律都需要。
用法:
import 完整类名;
import 包名.*;
import java.util.Scanner; // 完整类名。
import java.util.*;
但import java.; 这是不允许的,因为在java语言中规定,这里的只代表某些类的名字。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package com;
import com.bjpowernode.javase.chapter17.*;
public class Test02{ public static void main(String[] args){
HelloWorld hw1 = new HelloWorld(); System.out.println(hw1);
HelloWorld hw2 = new HelloWorld(); System.out.println(hw2); } }
|
访问控制权限
访问控制权限
1、访问控制权限都有哪些?
4个。
private 私有
public 公开
protected 受保护
默认
2、以上的4个访问控制权限:控制的范围是什么?
private 表示私有的,只能在本类中访问
public 表示公开的,在任何位置都可以访问
“默认”表示只能在本类,以及同包下访问。
protected表示只能在本类、同包、子类中访问。
访问控制修饰符 本类 同包 子类 任意位置
-----------------------------------------------------------------------------------------------------------------
public 可以 可以 可以 可以
protected 可以 可以 可以 不行
默认 可以 可以 不行 不行
private 可以 不行 不行 不行
范围从大到小排序:public > protected > 默认 > private
3、访问控制权限修饰符可以修饰什么?
属性(4个都能用)
方法(4个都能用)
类(public和默认能用,其它不行。)
接口(public和默认能用,其它不行。)
toString方法
以后所有类的toString()方法是需要重写的。
重写规则,越简单越明了就好。
System.out.println(引用); 这里会自动调用“引用”的toString()方法。
String类是SUN写的,toString方法已经重写了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
public class Test01{ public static void main(String[] args){ MyTime t1 = new MyTime(1970, 1, 1); String s1 = t1.toString();
System.out.println(s1);
System.out.println(t1); } } class MyTime{ int year; int month; int day;
public MyTime(){ }
public MyTime(int year, int month, int day){ this.year = year; this.month = month; this.day = day; }
public String toString(){ return this.year + "/" + this.month + "/" + this.day; } }
|
equals方法
以后所有类的equals方法也需要重写,因为Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要重写。
重写规则:自己定,主要看是什么和什么相等时表示两个对象相等。
基本数据类型比较实用:==
对象和对象比较:调用equals方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
public class Test02{ public static void main(String[] args){
int a = 100; int b = 100; System.out.println(a == b);
MyTime t1 = new MyTime(2008, 8, 8); MyTime t2 = new MyTime(2008, 8, 8); System.out.println(t1 == t2);
boolean flag = t1.equals(t2); System.out.println(flag);
MyTime t3 = new MyTime(2008, 8, 9); System.out.println(t1.equals(t3));
MyTime t4 = null; System.out.println(t1.equals(t4)); } }
class MyTime { int year; int month; int day;
public MyTime(){ } public MyTime(int year, int month, int day){ this.year = year; this.month = month; this.day = day; }
public boolean equals(Object obj) { if(obj == null || !(obj instanceof MyTime)){ return false; } if(this == obj){ return true; } MyTime t = (MyTime)obj; return this.year == t.year && this.month == t.month && this.day == t.day ; }
}
|
String类重写方法:
String类是SUN编写的,所以String类的equals方法重写了。
以后判断两个字符串是否相等,最好不要使用==,要调用字符串对象的equals方法。
注意:重写equals方法的时候要彻底。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
public class Test03{ public static void main(String[] args){
String s1 = "hello"; String s2 = "abc";
String s3 = new String("Test1"); String s4 = new String("Test1"); System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
String x = new String("动力节点"); System.out.println(x.toString()); System.out.println(x); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
public class Test05{ public static void main(String[] args){ Object o1 = new String("hello world!"); Object o2 = new User(); Object o3 = new Address();
User u1 = new User("zhangsan", new Address("北京","大兴区","11111")); User u2 = new User("zhangsan", new Address("北京","大兴区","11111"));
System.out.println(u1.equals(u2));
User u3 = new User("zhangsan", new Address("北京","朝阳区","11112")); System.out.println(u1.equals(u3)); } }
class User{ String name; Address addr;
public User(){ } public User(String name, Address addr){ this.name = name; this.addr = addr; }
public boolean equals(Object obj){ if(obj == null || !(obj instanceof User)) return false; if(this == obj) return true; User u = (User)obj; if(this.name.equals(u.name) && this.addr.equals(u.addr)){ return true; } return false; } }
class Address{ String city; String street; String zipcode;
public Address(){ } public Address(String city,String street,String zipcode){ this.city = city; this.street = street; this.zipcode = zipcode; }
public boolean equals(Object obj){ if(obj == null || !(obj instanceof Address)) return false; if(this == obj) return true; Address a = (Address)obj; if(this.city.equals(a.city) && this.street.equals(a.street) && this.zipcode.equals(a.zipcode)){ return true; } return false; } }
|
finalize方法(了解即可)
关于Object类中的finalize()方法。(非重点 了解即可。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
public class Test06{ public static void main(String[] args){
for(int i = 0; i < 1000; i++){ Person p = new Person(); p = null;
if(i % 2 == 0){ System.gc(); } }
} }
class Person{
protected void finalize() throws Throwable { System.out.println(this + "即将被销毁!"); }
}
|
hashCode方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
public class Test07{ public static void main(String[] args){ Object o = new Object(); int hashCodeValue = o.hashCode();
System.out.println(hashCodeValue);
MyClass mc = new MyClass(); int hashCodeValue2 = mc.hashCode(); System.out.println(hashCodeValue2);
MyClass mc2 = new MyClass(); System.out.println(mc2.hashCode()); } }
class MyClass { }
|