1.java代碼的運行順序
在繼承關係中的順序:
class show{
public show(){
System.out.println("1");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("2");
}
static {
System.out.println("3");
}
}
class test extends show{
public test(){
System.out.println("4");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("5");
}
static {
System.out.println("6");
}
}
out:
3
6
2
1
5
4
無繼承中的順序:
class test {
public test(){
System.out.println("4");
}
public static void main(String[] args) {
test tmp=new test();
}
{
System.out.println("5");
}
static {
System.out.println("6");
}
}
out:
6
5
4
2.修飾符abstract、static和final
abstract:
(1)abstract修飾類,會使這個類成爲一個抽象類,這個類將不能生成對象實例,但可以做爲對象變量聲明的類型(見後面實例),也就是編譯時類型。抽象類就相當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。
(2)abstract修飾方法,會使這個方法變成抽象方法,也就是隻有聲明而沒有實現,需要子類繼承實現。
abstract class biont{
private int age;
private int sex;
public biont(int sex){
age=0;
this.sex=sex;
}
public void addAge(){
age++;
}
}
class car extends biont{
private int color;
private String name;
public car(int sex) {
super(sex);
}
}
class test {
public test(){
}
public static void main(String[] args) {
//biont tmp=new biont();//不能實例化
car tmp=new car(1);
}
}
static:
static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。
package teststatic;
class myMath{
static double Pi=3.1415926;
static void println(){
System.out.print("\n");
}
}
public class testStatic {
public static void main(String[] args) {
System.out.print("myMath.Pi is ");
myMath.println();
System.out.print(myMath.Pi);
}
}
final:
final數據/類:abstract class biont{
private int age;
private int sex;
public biont(int sex){
age=0;
this.sex=sex;
}
final public void addAge(){
age++;
}
}
final class car extends biont{
private int color;
private String name;
public car(int sex) {
super(sex);
}
}
class test {
public test(){
}
public static void main(String[] args) {
car tmp=new car(1);
}
}
final數據:
package teststatic;
class myMath{
final double Pi=3.1415926;
public void printPi(){
System.out.print(Pi);
}
}
public class testStatic {
public static void main(String[] args) {
myMath p=new myMath();
System.out.print("myMath.Pi is ");
p.printPi();
}
}
3.單例模式
class printer{
private static final printer output=new printer();
private printer(){
}
protected void finalize(){
}
public static printer OnInit(){
return output;
}
}
class test {
public test(){
}
public static void main(String[] args) {
printer n=printer.OnInit();
printer m=printer.OnInit();
if(n==m)System.out.print("same");
else System.out.print("diff");
}
}
out:
same