如何理解“万事万物皆对象”

  • 在Java语言范畴中,我们都将功能结构等封装到类中,通过类的实例化来调用具体的功能结构
  • 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象

匿名对象

  • 理解:正常情况下一个对象有堆内存空间和指向堆内存的栈内存空间,如果一个对象只有堆内存空间却没有栈内存指向,这样的对象就叫做匿名对象。
public class Test{
    public static void main(String[] args){
        //创建有名字的对象
        Car c1 = new Car();
        c1.run();
        
        new Car().run();  //匿名对象调用方法
        new Car().run();  //匿名对象只适合对方法的一次调用,因为调用多次就会产生多个对象
    }
}

class Car{
    String color; //颜色
    int price;  //价格
    
    public void run(){
        System.out.println(color + "的汽车要" + price + "元");
    }
}

方法的重载(overload)

重载的概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。
重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型)。调用时,根据方法参数列表的不同来区别。
重载的示例:

public class PrintStream {
    public static void print(int i) {.....}
    public static void print(float f) {.....}
    public static void print(String s) {....}

    public static void main(String[] args) {
        print(3);
        print(1.2f);
        print( "hello! ");
    }
}

可变形参的方法

  • 声明格式:方法名(参数的类型名 ...参数名)
  • 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  • 可变个数形参的方法与同名的方法之间,彼此构成重载
  • 可变参数方法的使用与方法参数部分使用数组是一致的
  • 方法的参数部分有可变形参,需要放在形参声明的最后
  • 在一个方法的形参位置,最多只能声明一个可变个数形参

方法参数的值传递机制

必须由其所在类或对象调用才有意义。若方法含有参数:

  • 形参:方法声明时的参数
  • 实参:方法调用时实际传给形参的参数值

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
例题1
public class TransferTest1 {
    public void swap(int a,int b) {
        int tmp = a;
        a = b;
        b = tmp;
        System.out.print1n("swap方法里,a的值是"+a + "; b的值是"+ b);
        //输出a = 10,b = 5
    }
    public static void main(String[] args) {
        TransferTest1 test = new TransferTest1();
        int a = 5;
        int b = 10;
        test.swap(a, b);
        System.out.println("交换结束后,变量a的值是"+a + ";变量b的值是"+ b);
        //输出a = 5,b = 10
    }
}
例题2
class DataSwap {
    public int a;
    public int b;
}
    public class TransferTest2 {
        public static void swap(DataSwap ds) {
            int temp = ds.a;
            ds.a = ds.b;
            ds.b = temp;
            System.out.println("swap方法里,a Field的值是" + ds.a + ";b Field的值是" + ds.b);
}
    public static void main(String[] args) {
        DataSwap ds = new DataSwap();
        ds.a = 5;
        ds.b = 10;
        swap(ds);
        System.out.println("交换结束后,a Field的值是" + ds.a + ";b Field的值是" + ds.b);
    }
}
例题3
public class TransferTest3 {
    public static void main(String args[]){
        TransferTest3 test = new TransferTest3();
        test.first();
}
public void first() {
    int i = 5;
    value v = new value();v.i = 25;
    second(v, i);
    System.out.println(v.i);
}
public void second (value v, int i) {
    i = 0;
    v.i = 20;
    Value val = new Value();v = val;
    System.out.println(v.i + " " +i);
    }
}
class Value {
    int i = 15;
}

递归方法

  • 递归方法就是在一个方法体内调用它自身。
  • 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。
  • 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死 循环。
例题1
//计算1-100之间所有自然数的和
public int sum(int num){
    if(num == 1){
        return 1;
    }else{
        return num + sum(num - 1);
    }
}
例题2
//请用Java写出递归求阶乘(n!)的算法
public int sum(int n){
    if(n == 1){
        return 1;
    }else{
        return n * sum(n - 1);
    }
}
最后修改:2021 年 08 月 16 日 10 : 50 AM
如果觉得我的文章对你有用,请随意赞赏