(九)Java中的方法
- 方法:所谓方法就是函数、过程,是语句的集合,它们在一起执行一个功能。
- 封装一段特定的业务逻辑功能
- 尽可能独立,一个方法只干一件事
- 方法可以被反复调用多次
- 可以减少代码重复,有利于代码维护
- 何时用:假设有一个功能,在很多地方都得使用,就将功能封装到一个方法
- 方法的定义:五要素
- 修饰词 返回值类型 方法名(参数列表){
- 方法体---具体的业务逻辑功能实现
}
//无参无返回值
public static void say(){
System.out.println("大家好,我叫zhangsan,今年38岁了");
}
//有参无返回值
public static void sayHi(String name){ //形参
System.out.println("大家好,我叫"+name+",今年38岁了");
}
//有参无返回值
public static void sayHello(String name,int age){ //形参
System.out.println("大家好,我叫"+name+",今年"+age+"岁了");
}
//无参有返回值
public static double getNum(){
//若方法有返回值,则在方法中必须出现return关键字
//并且return后的数的类型必须与返回值类型匹配
//return "abc"; //编译错误
return 8.88; //1)结束方法的执行 2)返回结果给调用方
}
//有参有返回值
public static int plus(int num1,int num2){
int num = num1+num2;
return num; //返回的是num里面的那个数
//return num1+num2; //返回的是num1与num2的和
}
//无参有返回值
public static int[] testArray(){
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
}
return arr;
}
- 方法的调用:
- 无返回值:方法名(有参传参)
public class MethodDemo {
public static void main(String[] args) {
say(); //调用say()方法
//sayHi(); //编译错误,有参则必须传参
//sayHi(250); //编译错误,参数类型必须匹配
sayHi("zhangsan"); //String name="zhangsan" //实参
sayHi("lisi"); //String name="lisi" //实参
sayHi("wangwu"); //String name="wangwu" //实参
sayHello("zhangsan",25); //实参 String name="zhangsan",int age=25
sayHello("lisi",24); //实参
}
}
- 有返回值:数据类型 变量 = 方法名(有参传参);
//方法的演示
public class MethodDemo {
public static void main(String[] args) {
double a = getNum(); //getNum()的值就是return后的那个数
System.out.println(a); //8.88,模拟对返回值的后续操作
int b = plus(5,6); //plus(5,6)的值就是return后的那个数
System.out.println(b); //11,模拟对返回值的后续操作
int m=5,n=6;
int c = plus(m,n); //传递的是m和n里面的数
System.out.println(c); //11,模拟对返回值的后续操作
int[] d = testArray();
System.out.println("长度为:"+d.length); //10,模拟对返回值的后续操作
for(int i=0;i<d.length;i++){ //模拟对返回值的后续操作
System.out.println(d[i]);
}
}
}
- return
- return 值; //1) 结束方法的执行 2) 返回结果给调用方-------用在有返回值的方法中
- return; //1) 结束方法的执行--------------用在无返回值的方法
(十)Java中的类和对象
- 什么是类?什么是对象?
- 现实生活是由很多很多对象组成的,基于对象抽出了类
- 对象:软件中真实存在的单个个体/东西
类:类型/类别,代表一类个体 - 类是对象的模板,对象是类的具体的实例
- 类中可以包含:
- 对象的属性/特征-----------------------------成员变量
- 对象的行为/动作/功能---------------------方法
- 一个类可以创建多个对象
- 如何创建类?如何创建对象?如何访问成员?
//创建类:
public class Student {
//成员变量
String name;
int age;
String address;
//方法
void study(){
System.out.println(name+"在学习...");
}
void sayHi(){
System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);
}
}
//创建对象:
public class StudentTest {
public static void main(String[] args) {
//创建一个学生对象
Student zs = new Student();
//访问成员变量
zs.name = "zhangsan";
zs.age = 25;
zs.address = "河北廊坊";
//调用方法
zs.study();
zs.sayHi();
Student ls = new Student();
ls.name = "lisi";
ls.age = 27;
ls.address = "黑龙江佳木斯";
ls.study();
ls.sayHi();
//1)创建了一个学生对象
//2)给所有成员变量赋默认值
Student ww = new Student();
ww.study();
ww.sayHi();
}
}
- 方法的签名:方法名+参数列表
- 方法的重载(overload/overloading):-------------------更方便方法的调用
- 发生在同一类中,方法名相同,参数列表不同
- 编译器在编译时会根据方法的签名自动绑定方法
//演示方法的重载
class Aoo{
void show(){}
void show(String name){}
void show(int age){}
void show(String name,int age){}
void show(int age,String name){}
//int show(){ return 1; } //编译错误,重载与返回值类型无关
//void show(String address){} //编译错误,重载与参数名称无关
}
//演示重载方法的调用
public class OverloadDemo {
public static void main(String[] args) {
Aoo o = new Aoo();
o.show();
o.show("zhangsan");
o.show(25);
o.show("zhangsan",25);
o.show(25,"zhangsan");
}
}
(十一)构造方法
- 构造方法:构造函数、构造器、构建器----------------复用给成员变量初始化代码
- 作用:给成员变量赋初始值
- 与类同名,没有返回值类型(连void都没有)
- 在创建(new)对象时被自动调用
- 若自己不写构造方法,则编译器默认提供一个无参构造方法
- 若自己写了构造方法,则不再默认提供
- 构造方法可以重载
- this:指代当前对象,哪个对象调用方法它指的就是哪个对象,只能用在方法中,方法中访问成员变量之前默认有个this
- this的用法:
- this.成员变量名------访问成员变量
- 当成员变量和局部变量同名时,若想访问成员变量则this不能省略,其它一般省略
- this.方法名()------调用方法(一般不用,了解)
- this()------调用构造方法(一般不用,了解)
- 构造方法和this的演示
class Student {
//成员变量
String name;
int age;
String address;
//构造方法
Student(String name,int age,String address){
this.name = name; //zs.name="zhangsan"
this.age = age; //zs.age=25
this.address = address; //zs.address="LF"
}
//方法
void study(){
System.out.println(name+"在学习...");
}
void sayHi(){
System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);
}
}
//构造方法和this的演示
public class ConsDemo {
public static void main(String[] args) {
//Student zs = new Student(); //编译错误,Student类没有无参构造
Student zs = new Student("zhangsan",25,"LF");
Student ls = new Student("lisi",26,"JMS");
zs.sayHi();
ls.sayHi();
}
}
- null:表示空,没有指向任何对象。若引用的值为null,则该引用不能再进行任何点操作了,若操作则发生NullPointerException空指针异常。
(十二)Java中的继承
继承的概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
- 继承:
- 作用:代码复用,通过extends来实现继承
- 超类/父类:共有的属性和行为
- 派生类/子类:特有的属性和行为
- 派生类可以访问:派生类的+超类的,而超类不能访问派生类的
- 一个超类可以有多个派生类,但一个派生类只能继承一个超类------即单一继承
- 继承具有传递性
- Java规定:构造派生类之前必须先构造超类
- 在派生类构造方法中若没有调用超类构造方法,则默认super()调超类无参构造方法
- 在派生类构造方法中若自己调用了超类构造方法,则不再默认提供
- 注意:super()调用超类构造方法,必须位于派生类构造方法的第一行
- super:指代当前对象的超类对象
super的用法:
super.成员变量名------------------------访问超类的成员变量(一般不用,了解)
super.方法名()----------------------------调用超类的方法
super()--------------------------------------调用超类的构造方法
public class SuperDemo {
public static void main(String[] args) {
Boo o = new Boo();
}
}
class Aoo{
Aoo(){
System.out.println("超类构造...");
}
}
class Boo extends Aoo{
Boo(){
//super(); //默认的,写不写都在
System.out.println("派生类构造...");
}
}
class Coo{
Coo(int a){
}
}
class Doo extends Coo{
Doo(){
super(5); //调用超类的有参构造
}
/*
//如下代码为默认的
Doo(){
super(); //超类若没有无参构造,则编译错误
}
*/
}
(十三)向上造型和重写
- 向上造型:
- 超类型的引用指向派生类的对象
- 能点出来什么,看引用的类型
public class UploadDemo {
public static void main(String[] args) {
Aoo o1 = new Aoo();
o1.a = 1;
o1.show();
//o1.b = 2; //编译错误,超类不能访问派生类的
//o2.test(); //编译错误
Boo o2 = new Boo();
o2.b = 1;
o2.test();
o2.a = 2; //正确,派生类可以访问超类的
o2.show(); //正确
Aoo o3 = new Boo(); //向上造型
o3.a = 1;
o3.show();
//o3.b = 2; //编译错误,能点出来什么,看引用的类型
//o3.test(); //编译错误
}
}
class Aoo{
int a;
void show(){
}
}
class Boo extends Aoo{
int b;
void test(){
}
}
- 方法的重写(override/overriding):重新写
- 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
- 重写方法被调用时,看对象的类型
- 重写需遵循"两同两小一大"原则:
- 两同: 方法名相同、参数列表相同
- 两小:
- 派生类方法的返回值类型小于或等于超类方法
- void和基本类型时,必须相等
- 引用类型时,可以小于或等于
- 派生类方法抛出的异常小于或等于超类方法
- 一大:
- 派生类方法的访问权限大于或等于超类方法
- 重写与重载的区别:(常见面试题)
- 重写(override):发生在父子类中,方法名相同,参数列表相同
- 重载(overload):发生在同一类中,方法名相同,参数列表不同
本文完!
写在结尾:
2022 年 9 月 21 日 一个java菜鸟,发布于北京海淀。
好记性不如烂笔头,持续学习,坚持输出~今天是持续写作的第2天。可以点赞、评论、收藏啦。