[JAVA]方法的重载、this、static关键字和静态初始化块
2021/9/16 11:34:59
本文主要是介绍[JAVA]方法的重载、this、static关键字和静态初始化块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
方法的重载(overloading)
- 同一个类中的不同方法可以有相同的方法名,但参数列表不同,方法内容也可以不同,就叫做方法的重载
- 参数的类型、参数的数量、参数的顺序只有任有一个不同,就说明参数列表不同。参数列表也叫做参数签名
- 方法的重载可以减少方法的种类,可以使同一方法(方法名)在不同的场景下发挥不同的作用
- 方法重载的规则
- 方法名相同
- 参数列表不同
- 返回值类型可以相同也可以不相同
- 若仅有返回值类型不同则不能称为方法的重载
例如:
class Hello{ public Hello() { } public Hello(String s){ System.out.println(s) } }
方法中的可变参数
意为在该方法中,参数的数量是可变的(可为 0),不管有多少个参数都可以成功调用该方法,但参数的类型不可变,在定义中是什么类型则增加的参数就必须是什么类型,用**参数类型+…**使用
可变参数实质上是定义了一个数组用来存放参数
例如:
class Hello{ public void func(String... s){ System.out.println(s.length); } }
注:可变参数必须位于参数列表的最后,故一个方法只能有一个可变参数
可变参数对方法重载的影响
在方法的重载中,程序在满足参数列表的同时会优先选择没有可变参数的方法
例如:
class Hello{ public static void main(String[] args){ helloworld("张三"); //选择只有一个参数的方法(1 helloworld("张三","李四"); //选择正好两个参数的方法(2 helloworld("张三","李四","王五"); //选择有可变参数的方法(3 } public static void helloworld(String s){ System.out.println("hello " + s); } public static void helloworld(String s1, String s2){ System.out.println("hello " + s1 + s2); } public static void helloworld(String... s){ System.out.println("hello "); } }
this关键字
- 在普通方法中,this指向当前调用该方法的对象
- 在构造方法中,this指向当前正要初始化的对象
- 在构造方法中,通过this可以调用该类的其他构造器,用this(参数列表)调用 (此时该语句必须位于方法体中的第一句
- this不能用于static方法
例如:
class Hello{ String name; int num; public void func(){ System.out.println(this.name + this.num); //此时this指向调用该方法的对象 } public Hello(){ } public Hello(String name){ this.name = name; //此时this指向当前正要初始化的对象 } public Hello(String name, int num){ this(name); //在构造器中通过this调用其他重载的构造函数,注意,该语句必须写在第一句 this.num = num; }
static关键字
static属性:被所有对象共享,先于对象存在
static方法:先于对象存在
static属性:
- 此时该属性被称为静态变量
- 静态变量隶属于类而不是对象,但对象仍可以访问(不推荐)
- 静态变量在类被载入时被初始化,一同编译成字节码文件加载至方法区
static方法:
- 此时该方法被称为静态方法
- 静态方法隶属于类而不是对象,但对象仍可以调用(不推荐)
- 静态方法在类被在载入时一同编译成字节码文件加载至方法区
- 在静态方法中不可以访问非静态的成员变量,因为在调用该方法时不会将对象的引用传递给它
- 在静态方法中不可以使用this关键字,因为this永远指向对象而不指向类
例如:
class Hello{ public static void main(String[] args){ Student student = new Student("张三"); System.out.println(Student.count); //通过 类名.变量名 直接访问静态变量 System.out.println(student.count); //可以用对象访问静态变量,但不推荐 Student.sayHello(); //通过 类名.方法名 直接调用静态方法 Student.sayHello(); //可以用对象调用静态方法,但不推荐 } class Student{ static int count; String name; public Student(String name){ this.name = name; } static void sayHello(){ System.out.println("Hello"); } } }
代码块与静态代码块
代码块:
- 代码块在实例化对象,调用构造方法之前执行
- 若有多个代码块,则按顺序全部执行
- 可以利用代码块对对象进行初始化,避免重载构造方法时的重复代码
静态代码块:
- 静态代码块在类被加载时执行
- 因为类只被加载一次,所以不管利用该类生成多少个对象,静态代码块都只执行一次
- 若有多个静态代码块,则按顺序全部执行
- 经常用来初始化类
- 静态代码块中不能访问非静态成员变量
- 从祖先类(Object)向下依次执行静态代码块,直到本类的静态代码块为止
这篇关于[JAVA]方法的重载、this、static关键字和静态初始化块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API