Java SE5新增加@Override注解,它并不是关键字,但是可以把它当作关键字使用。当你想要覆写(重写)某个方法时,可以选择添加这个注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错误信息。

  方法重载:重载的时候,方法名要一样,但是参数类型或个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

  方法覆写(重写):

    若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

    方法重载是编译时处理的,而方法覆盖是在运行时处理的。  

    在子类的某个方法覆盖父类的方法时,这个方法的访问权限可以被扩大,但是不能缩小,否则报错。

    父类的静态方法不能被子类的非静态方法覆盖,同样父类的非静态方法也不能被子类的静态方法覆盖。

    子类的方法覆盖父类的方法时,子类不能抛出父类没有抛出的异常。

构造方法:类中的一种方法,类似Python的__init__,但是有一些要求:

  1.方法名要和类名相同。

  2.在方法名的前面没有返回值类型的声明。

  3.不能用return返回一个值,但是可以单独写return作为方法的结束。

  4.java中每个类都至少有一个构造方法,如果没有定义构造方法,系统也会自动创建一个空的构造方法。

  5.构造方法一般用public来修饰。

  6.在初始化含参的构造方法时必须检查参数的合法性,这样可以提高代码的健壮性。

拷贝构造方法:

  用该类的一个对象来初始化这个类:

//Example:
//1.Clock类:
public class Clock {
private int hour;
private int minute;
private int second; public Clock(){
setTime(0,0,0);
} public Clock(int h,int m,int s){
setTime(h,m,s);
} /* 拷贝构造函数 */
public Clock(Clock clock){
this.hour=clock.hour;
this.minute=clock.minute;
this.second=clock.second;
} public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
public void setTime(int h,int m,int s){
if(h>=0 && h<24)
this.hour=h;
else
this.hour=0; if(m>=0 && m<60)
this.minute=m;
else
this.minute=0; if(s>=0 && s<60)
this.second=s;
else
this.second=0;
} public void printTime(){
if(this.hour<10)
System.out.print("0");
System.out.print(this.hour+":"); if(this.minute<10)
System.out.print("0");
System.out.print(this.minute+":"); if(this.second<10)
System.out.print("0");
System.out.println(this.second);
}
}
//2.main函数:
public class Program {
public static void main(String[] args) {
Clock c1=new Clock(6,43,23);
Clock c2=new Clock(c1);//调用拷贝构造函数
c1.printTime();
c2.printTime();
}
}
//3.运行结果:
06:43:23
06:43:23

用 this 调用构造方法

  调用这个类的另一个构造方法

public Card(String i, String n, char s, double m, double initial){
this(i, n, s, m);
money += initial;

构造方法继承

  java子类可以继承父类所拥有的成员变量和成员方法,但父类的构造方法不能继承。(正常子类可以直接用父类的方法和变量,但是构造方法必须使用super()调用)

  要在子类中的构方法中使用super();来调用父类的构造方法,该方法必须放置于子类构造方法的第一句:

public son(){
super(); // 调用父类无参构造方法
a = 1;
}

  如果子类的构造方法没有调用父类的构造方法,那系统会自动调用无参父类的构造方法。此时若父类没有无参构造函数会在编译时报错。

  一个构造方法中不能同时包括this调用和super调用,如果想同时包含两个调用,可以在this调用的构造方法中首先调用super()。

this关键字:

  1.通过this关键字可以明确的去访问一个类的成员变量,解决与局部变量名称冲突的问题。

  2.通过this关键字调用成员方法。

  3.构造方法是在实例化对象时被java虚拟机自动调用的,在程序中不能像调用其他方法一样调用构造方法,但可以在一个构造方法中使用“this([par1, par2...])”的形式来调用其他的构造方法,但是在成员方法中不可行,也不能在一个类中的两个构造方法中使用this相互调用。

static关键字:

  静态变量

    在类加载之后创建和初始化,而不是对象创建后

    在一个java类中,可以使用static关键字来修饰成员变量,该变量被称为静态变量,静态变量被所有实例共享。要注意,static不能用来修饰局部变量和内部类中的变量。

    (为什么static不能修饰局部变量?答:局部变量之所以叫局部变量,其作用域也只限于声明它的方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据的内存空间就被释放。而static定义的变量叫做静态变量,静态变量在类加载的时候创建,随着类的消失而消失。二者生命周期不同。)

    (为什么static不能修饰内部类中的变量?答:静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动分配内存给他,而内部类是在宿主类编译完编译的,也就是说,必须有宿主类存在后才能有内部类,这也就和编译时就为静态变量分配内存产生了冲突,因为系统执行:运行宿主类->静态变量内存分配->内部类,而此时内部类的静态变量先于内部类生成,这显然是不可能的,所以不能定义静态变量)

  静态方法

    跟Python中的静态方法@staticmethod类似,这种方法在不创建对象的情况下也能被调用:类名.方法。

    实例化后的对象同样可以调用静态方法:对象名.方法。

    静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

    静态方法的覆盖符合非静态方法覆盖的一些规则,二者区别在于java虚拟机将静态方法绑定在类上,而将非静态方法绑定于对象实例。

  静态代码块

    static {...}

    当类被加载时静态代码块会被执行,由于类只加载一次,静态代码块也只执行一次,因此通常会使用静态代码块来对类的成员进行初始化。 

  静态类:

   java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来的类叫外部类。

  在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以为static。 

strictfp关键字:

  在main方法中使用strictfp将使用严格的浮点计算,在类中使用strictfp关键字则这个类中的所有方法都要使用严格的浮点计算。

类的导入:

  如果同时要使用java.sql.Date和java.util.Date,需要在类的前面指出完整的类名:

    java.util.Date uDate = new java.util.Date();

    java.sql.Date sDate = new java.sql.Date();

  main函数为什么一定要用static修饰?

    main函数是程序的入口,而存在于类中的main函数如果没有static修饰,只是一个普通的实例方法,只有通过类对象才能调用。加上static之后,在类对象定义之前,该方法就已经构建完成,使得该方法独立于类对象之外,可以成为所有程序的入口。

静态导入:  

//导入System的静态方法和静态域
import static java.lang.System.*;
public class exp {
public static void main(String args[]) {
// 不需要加类的前缀
out.println("No main()");
}
}

  

最新文章

  1. Oracle_12c_RAC_service_died问题分析处理
  2. thusc滚粗记
  3. LeetCode 459 Repeated Substring Pattern
  4. unicode可以通过编码(encode)成为特定编码的str
  5. MySql存储过程—2、第一个MySql存储过程的建立
  6. python提取隐含结构的字符串
  7. 【Android工具】DES终结者加密时报——AES加密演算法
  8. java se之File类
  9. 201521123104《JAVA程序设计》第三周学习总结
  10. 用Go校验下载文件之SHA256
  11. ubuntu 安装 pythonenv
  12. Eclipse修改Maven仓库配置
  13. Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序
  14. Tomcat 服务器安装 SSL证书,实现 HTTP 自动跳转 HTTPS
  15. (转)mblog解读(二)
  16. Tomcat 7集群基于redis的session共享设置
  17. 概率和期望dp
  18. JVM垃圾收集器组合--各种组合对应的虚拟机参数实践
  19. Discuz论坛管理的问题汇总
  20. .Net MVC缓存

热门文章

  1. BZOJ4009:[HNOI2015]接水果
  2. NSDictionary 用法
  3. Poj_1045
  4. Java常见设计模式之责任链模式
  5. .clearfix:after
  6. 11_adb指令练习
  7. Unity编辑器的扩展:IMGUI
  8. div设置滚动条内容任然显示不全
  9. ASP.NET MVC 小牛之旅1:何谓MVC
  10. LOJ6053 简单的函数(min_25筛)