java——方法重载与重写、构造方法、this关键字、static关键字、strictfp关键字、类的导入
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()");
}
}
java——方法重载与重写、构造方法、this关键字、static关键字、strictfp关键字、类的导入的更多相关文章
- java方法重载和重写
1.java的方法重载和重写,表示两种不同的类型.this关键字,出现在类的构造方法中,代表使用该构造方法所创建的对象.,this可以出现在实例方法中核构造方法中.但是不能出现在类方法中.实例方法只能 ...
- 《Java基础知识》Java方法重载和重写
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...
- 【知了堂学习笔记】java 方法重载与重写的归纳
方法重载:Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同.调用方法时通过传递给它们的不同个数和类型的参数来决定 ...
- java方法重载 与 重写
class ChongZai{ public void a(int a); public void a(Strting a); public void a(int a,int b); } 如上就是一个 ...
- java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定
1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...
- JAVA构造器,重载与重写
1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...
- Java:重载和重写
Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...
- java方法——重载2
什么是Java方法重载 方法重载的定义 1 对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数.类型.顺序至少有一个不一样,这时候局构成方法重载. END 方法重载示例 1 pu ...
- Java 方法重载,方法重写(覆盖),继承等细节注意
1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的 ...
随机推荐
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架.下面就简单介绍一下RPC框架技术选型的过 ...
- HTTP 协议入门(转载)
作者:阮一峰 (@ruanyf) www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 ...
- JAVA基础知识总结2(语法基础)
关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:暂时还未规定为关键字的单词,保留准备日后要使用的单词. 标识符:开发人员程序中自定义名词,比如类名,变量名,函数名. PS:1.不能使用关键字. ...
- ls- 查看文件信息
通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限),查看目录信息等等,ls 命令在日常的linux操作中用的很多,在此给大家介绍一下ls 命令的使 ...
- shell批量创建文件及改名
批量创建文件及改名企业面试题2:使用for循环在/usr/sunzy目录下通过随机小写10个字母,批量创建10个html文件. #!/bin/bash Path=/usr/sunzy [ -d $Pa ...
- 【总结整理】JQuery基础学习---动画
jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的st ...
- 4. DVWA亲测暴力破解
LOW等级 我们先用burpsuite抓包,因为burpsuite提供了暴力破解模块 我们先创建一个1.txt文件夹,把正确的账号密码写进去 我们输入 Username:1 Password: ...
- 7.23实习培训日志-JDBC
总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...
- [亂數] <細說> C/C++ 亂數基本使用與常見問題
陸陸續續寫了 EA 一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...