java基础之final关键字,形式参数和返回值问题

目录

一:final关键字

二:形式参数和返回值问题

1:形式参数

2:返回值类型

3:例子


一:final关键字

1:final关键字是最终的意思,可以修饰类,成员变量,成员方法。 

2:修饰类,类不能被继承

3:修饰变量,变量就变成了常量,只能被赋值一次

4:修饰方法,方法不能被重写

5:final修饰局部变量

在方法内部,该变量不可以被改变

在方法声明上,局部变量是值不能被改变, 引用类型是地址值不能被改变

6:final修饰变量的初始化时机在对象构造完毕前即可(可以在局部变量,构造代码块以及成员变量)

二:形式参数和返回值问题

1:形式参数

基本类型

引用类型(类,数组,接口)

类做形参时时,传入的应该是一个对象。

抽象类做形参,由于抽象类不能实例化所以应该有继承子类实例化并传入对象

接口做形参时,应该是传入的具体实现接口的类的实例化对象

2:返回值类型

基本类型

引用类型

类做返回值时,返回的应该是一个对象。

抽象类做返回值,由于抽象类不能实例化所以应该有继承子类实例化并返回对象

接口做返回值时,应该是返回具体实现接口的类的实例化对象

注意:应该用多态实例化对象

3:例子

1:数组做形参

package com.shujia.java.day2.proctice3;

public class Text1 {
    public static void main(String[] args) {
        int[] a={3,4,8,6,9,10,45};
        int i = arrayMax(a);//调用arrayMax方法返回一个最大值
        System.out.println("数组最大值为"+i);

    }
    /*定义一个方法arrayMax,传入的形参是数组,计算数组的最大值 */
    public static int  arrayMax(int[] a){
        int max=0;
        for (int i : a) {
            if(i>max){
                max=i;
            }
        }
        return max;

    }
}

 2:类做形参

package com.shujia.java.day2.proctice3;
class Student{
    private  int age;
    private  String name;

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Student() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void show(){
        System.out.println(getName()+"**"+getAge());
    }
}
public class Text2 {
    public static void main(String[] args) {
        Student student = new Student(20,"小华");//使用有参构造创建一个20岁叫小华的学生
        showNews(student);//调用showNews方法传入学生对象


    }
         /* 定义一个方法传入的是Student类 */
    public static void showNews(Student student) {
        student.show();//调用show方法

    }
}

3:抽象类做形参 

package proctice3;
/*定义一个抽象类Person有姓名和年龄成员属性和show抽象方法,定义一个学生类继承Person抽象类*/
abstract  class Person{
    private int age;
    private String name;

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Person() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public abstract void show();

}
class Student1 extends Person{
    public Student1(int age, String name) {
        super(age, name);
    }

    public Student1() {
    }

    @Override
    public void show() {
        System.out.println(super.getName()+"**"+super.getAge());
    }
}
public class Text3 {
    public static void main(String[] args) {
        Person person=new Student1(18,"小花");//多态实例化 Person创建一个18的小花对象
        show(person);//调用show方法传入实例化对象

    }
    /*定义一个形参是Person抽象类的方法*/
    public static void show(Person person){
        person.show();//调用show方法
    }
}

 4:接口做形参

package proctice3;
/*定义一个学习接口,接口里有一个抽象方法学习,定义一个老师类实现学习接口*/
interface Study{
    public abstract void study();
}
class Teacher implements Study{

    @Override
    public void study() {
        System.out.println("老师需要学习");
    }
}
public class Text4 {
    public static void main(String[] args) {
        Study s=new Teacher();//接口多态创建一个s对象
        show(s);//将对象传入show方法


    }
    public static void show(Study study){//定义一个show方法传入的形参是接口
        study.study();//调用study方法
    }
}

 5:返回值是数组

package proctice3;

public class Text5 {
    public static void main(String[] args) {
        int[] arr={1,5,2,3,4,9,0,19,12};
        int[] sort = sort(arr);
        System.out.print("[");
        /*输出数组*/
        for (int i : sort) {
            if(i==sort[sort.length-1])
            { System.out.print(i+","+"]");}
            else{
                System.out.print(i+",");
            }
        }

    }
    /*定义一个冒泡排序对数组进行排序返回数组*/
    public static int[] sort(int[] a){
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-i-1;j++){
                if(a[j+1]<a[j]){
                    int tem=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tem;
                }
            }
        }
        return a;
    }

}

 6:返回值是类

package proctice3;
//定义一个学生类
class Student3{
    private  int age;
    private  String name;

    public Student3(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Student3() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void show(){
        System.out.println(getName()+"**"+getAge());
    }
}
public class Text6 {
    public static void main(String[] args) {
        Student3 s = show();//调用show方法
        //利用set方法给对象赋值
        s.setName("小华");
        s.setAge(18);
        s.show();//调用Student3的show方法


    }
    public static Student3 show(){//定义一个返回值是Student3类型的数据
        return new Student3();//Student3的匿名对象
    }
}

7:返回值是抽象类 

package proctice3;
/*定义一个抽象类Person有姓名和年龄成员属性和show抽象方法,定义一个学生类继承Person抽象类*/
abstract  class Person{
    private int age;
    private String name;

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Person() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public abstract void show();

}
class Student1 extends Person{
    public Student1(int age, String name) {
        super(age, name);
    }

    public Student1() {
    }

    @Override
    public void show() {
        System.out.println(super.getName()+"**"+super.getAge());
    }
}
public class Text3 {
    public static void main(String[] args) {
        Person person = show();//调用show方法返回 Person对象
        //利用set方法赋值
        person.setAge(18);
        person.setName("小华");
        //调用 Person的show方法
        person.show();

    }
    /*定义一个形参是Person抽象类的方法*/
    public static Person show(){
        Person p=new Student1();//多态实例化 抽象类Person
        return  p;

    }
}

7:返回值是接口

package proctice3;
/*定义一个学习接口,接口里有一个抽象方法学习,定义一个老师类实现学习接口*/
interface Study{
    public abstract void study();
}
class Teacher implements Study{

    @Override
    public void study() {
        System.out.println("老师需要学习");
    }
}
public class Text4 {
    public static void main(String[] args) {

        Study study = show();//调用show方法
        study.study();


    }
    public static Study show(){//定义一个show方法返回的是接口Study
        Study s=new Teacher();//接口实例化创建对象
        return s;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值