java面向对象2

本文详细解释了Java中基本数据类型和引用类型的值传递差异,介绍了this关键字在类中的作用,以及static关键字对静态变量、方法和代码块的特性,包括静态方法的限制。通过实例代码展示了如何在构造方法和代码块中使用这些概念。
摘要由CSDN通过智能技术生成

值传递 

基本数据类型的传递:

形参改变后不对实参造成影响,使用实参值填充的形参,传递的是对象本身。

引用类型传递:

引用数据类型作为参数传递,传递的是对象的地址,实参和形参是同一个对象,任一方改变,另一方也变。传递的是对象的引用。

this关键字

在类中表示当前正在访问的对象

this.成员变量名————显示的当前访问的对象的成员变量。

在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

public class Dog {
    String name;
    int age;
    String like;
    public Dog(){
        this(2,"勾","丝");//调用下面的的构造方法2
    }
    public Dog(String name,int age,String like){//构造1
        this.name=name;//this.+变量名是指向成员变量中的name,而不是传入参数中的局部变量name
        this.age=age;
        this.like=like;
    }
    public Dog(int age,String name,String like){//构造2
        this.name=name;
        this.age=age;
        this.like=like;
    }
    public void pot(){
        System.out.println("名字:"+name+" "+age+"岁,"+"喜欢吃"+like);
    }
    public void work(){

    }
}

static关键字

static被称为静态.

可以用来修饰类的成员变量,成员方法,代码块,内部类。

static修饰的属性称为静态属性(静态变量)

静态变量建议使用类名.直接访问静态的变量

静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存的类中只有一份,当一个对象修改静态属性后,所有对象的静态属性都改变。

静态变量随着类被加载时由系统默认初始化加载

静态成员可以在创建对象前被使用。

静态成员变量也称类变量(即为在内存中只有一份),所有对象共享。可以直接使用类名访问。

用static修饰的成员方法就是静态方法,也称类方法。

静态方法在本类的任意方法、代码块、构造器中都可以直接被调用;

静态的方法,只能使用静态的成员变量,因为他们都随着类的加载而加载。

静态方法只能访问静态的成员变量,因为他们都随着类的加载而加载,非静态的方法可以访问静态的成员变量。

静态的方法中不能使用this和super等关键字。

package Day2;
public class Chinese {
    //成员变量
    String name;
    static String country="中国";//中国人的国籍固定为中国,所以定义一个静态变量,也可省内存空间
    static int  count =0;//一个静态属性的计数器
    public Chinese(){//构造方法,每次调用方法时,都执行计数一次
        count++;
    }
    //方法
    /*
    public static void pot(){
        System.out.println("国籍:"+country+"姓名:"+name);//其中name为成员变量无法使用静态方法:
    }
    */
    public void pot(){
        System.out.println("国籍:"+country+"姓名:"+name);//非静态方法
    }
    public static void count1(){
        System.out.println(count);
    }
    public static int MaX(int a,int b){//静态方法,其中没有成员变量
       return (a>b)?b:a;
    }
public static void main(String[] args) {
        System.out.println(count);
        Chinese china1 =new Chinese();
        china1.name="小朱";
        china1.pot();
        System.out.println(count);
        Chinese china2 =new Chinese();
        china2.name="小王";
        china2.pot();
        System.out.println(count);
        System.out.println(MaX(10,19));
        Chinese.count1();//直接用类名访问
    }
}
代码块

在类中声明的一个没有名字的代码块;

代码块分为:
实例代码块:在创建对象时,自动执行;
静态代码块:在类被加载时,自动执行;

运行类中的main方法以及访问类中的静态的成员变量,静态成员方法,创建类的对象等,都要加载类。

package Day2;
public class dome1 {
    static int a=10;
    {
        System.out.println("实例代码块1");
    }
    {
        System.out.println("实例代码块0");
    }
    static{
        System.out.println("静态代码块.");
    }
    public static void Dom(){
        System.out.println(a);
    }
    //执行main函数但没创建对象,只执行了静态代码块
    public static void main(String[] args) {
        System.out.println(a);
    }
}
package Day2;
public class testdemo1 {
    public static void main(String[] args) {
        System.out.println(dome1.a);
        //访问类中的静态的成员变量,类被加载,未创建对象。
        System.out.println("-----------------");
        dome1.Dom();//访问类中的静态方法
        System.out.println("-----------------");
        //创建一个对象时,类已经被加载了
        dome1 dem=new dome1();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值