JAVA面向对象(OOP)-方法与方法重载

1.关于对象实例化时在内存中的存储

 关于字符串

String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");

System.out.println(s1);
System.out.println(s2);
//==在基本数据类型比较的是值,在引用数据类型比较的是地址
//其原因是因为栈存储的不同
System.out.println(s1==s2);//true
System.out.println(s2==s3);//false
System.out.println(s3==s4);//false

2.关于方法传参

public static void main(String[] args){
    int i=1;
    String s="1";
    Dog dog=new Dog();
    dog.name="1";
    System.out.println(i);
    System.out.println(s);
    System.out.println(dog.name);
    m1(i);
    m2(s);
    m3(dog);
    System.out.println(i);
    System.out.println(s);
    System.out.println(dog.name);
}

public static void m1(int i){
    i=i+1;
    System.out.println(i);
}

public static void m2(String s){
    s=s+"1";
}

public static void m3(Dog g){
    d=new Dog();
    d.name="2";
}

关于所有的传递都是副本的传递

        对于基本数据类型:由于基本数据类型在堆内存中本来就是值,所以传递后仅仅修改是不会影响到调用方

        引用数据类型:由于存储的是地址,所以传递后修改时会影响到调用方

        字符串比较特殊,他不会因为你修改了就直接对你的字符串常量池做修改,字符串的修改是将你的引用改成新的引用

3.构造方法

//无参数的调用方法
public Dog(){
    System.out.println("这是无参数的构造方法");
    System.out.println("这是构造方法,每当我们new一个Dog的时候就会执行");
    System.out.println();
}
//有参的构造方法
//这个既含有有参构造器,又含有无参构造器的方法
//我们乐意称之为构造器的重载-reload
public Dog(String string1,int int1){
    System.out.println("这是有参数的构造方法。他有两个参数,第一个参数是String1");
    System.out.println("第二个参数是int1");
    name=string1;
    age=int1;
}

4.关于this关键字

//构造方法,如果你一个都不写
//那么javac编译时会自动生成一个无参共有的构造方法
//如果你写了某一个构造方法,那么你这个自动生成的无参共有的构造方法会不再生成
public cat(string name){
    //this();将会调用当前类的构造方法
    //如果你括号中存在参数,则会调用对应的含参构造器
    //this();这段代码只可以写在构造器中,并且只可以出现在构造器的第一行代码。
    //注意,你this();调用的构造器之后不可以再直接或间接调用回当前的构造器
    //否则会发生死循环    
    this();
    //this关键字代表的“这个当前对象”
    //我们可以使用this(),this.等等
    //this()就相当于当前对象的无参构造方法
    //this.就相当于使用当前对象调用某个属性/方法
    this.name=name;
    this.play();
    //打印当前的对象
    system.out.println(this);
}

5.关于方法的重载

同一个类中:方法名相同,参数项不同,与返回值、访问修饰符无关

//以下三个方法均为System.out这个Printstream类的方法
//由于他们三个参数不同
//第一个是string
//第二个是int
//第三个是Dog (object)
//也就是说,他们满足了方法名相同,参数项不同
//所以,我们称之为这是println();方法的重载
system.out.print1n("He11o wor1d ! ");
system.out.print1n(1);
system. out.print1n(new Dog();

        方法重载,我们需要让JVM java虚拟机在执行代码的时候可以准确地定位出我们需要调用的方法。由于方法名是一样的,对于不同的返回值而言,存在返回值可以不去接受这种情况

public class A{
     public void method1()i
          System.out.print1n( "method1");
     }
     pub lic string method1({
          System.out. print1n("123"');
          return "";
     }
}
                              
public static void main(string[] args){
          A a = new A();
          a.method1();
          a.method1();
}

        如同上述案例,我们都无法区别13行和14行到底应该执行的是3还是6行代码。所以java不允许写重名、同参的方法,除非你这几个同名方法是参数不同,我们称之为方法的重载。

6.成员变量与局部变量

1.作用域不同

        局部变量的作用域仅限于定义他的方法

        成员变量的作用域在整个类内部都是可见的

2.初始值不同

        Java会给成员变量一个初始值

        Java不会给局部变量赋予初始值

        在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值