Java 同一类中方法和变量之间的调用关系

一、同一个JAVA类中方法可以调用变量

       1、构造方法中调用实例变量、静态成员变量、局部变量

         (1).可以访问实例变量,默认this.实例变量,this.可以省略。
                   出现成员变量隐藏的情况时,强制调用被隐藏的实例变量值时,this不可以省略
         (2).可以访问静态成员变量,默认类名.静态变量,或this.静态变量,类名和this.可省略。  
         (3).可以访问自己的局部变量,直接局部变量名称

      2、实例方法中调用实例变量、静态成员变量、局部变量

         (1).可以方法实例变量,默认this.实例变量,this.可以省略

                   出现成员变量隐藏的情况,强制调用被隐藏的实例变量值时,this.不可以省略

         (2).可以访问静态成员变量,默认类名.静态变量,或this.静态变量,类名和this.可省略

         (3).可以访问自己的局部变量,直接局部变量名称

      3、静态方法中调用静态成员变量、局部变量

          (1).不可以访问当前类中实例变量

          (2).不可以使用this.

          (3).可以访问静态成员变量,默认类名.静态变量,类名可以省略

          (4).可以访问自己的局部变量,直接局部变量名称

     

public class Student {
    //定义一个实例变量
    public int age = 10;
    //定义一个静态成员变量
    static String name = "张三";
    //定义一个无参数构造方法
    public Student(){
//        //构造方法中调用实例变量
//        //构造方法中可以访问实例变量,默认this.实例变量,this.可以省略。
//        System.out.println("构造方法中,用this.实例变量 方式,我今年"+this.age+"岁");
//        System.out.println("构造方法中,省略this.实例变量,我今年"+age+"岁");
//        //构造成员变量隐藏
//        int age = 45;
//        //如果出现成员变量隐藏,那么调用成员变量的时候this.不可省略
//        System.out.println("构造方法中,成员变量隐藏,用this.实例变量 方式,我今年"+this.age+"岁");
//        System.out.println("构造方法中,成员变量隐藏,省略this. 方式,我今年"+age+"岁");
//
//        //构造方法中调用静态成员变量
//        //构造方法中可以访问静态成员变量,默认类名.静态变量,也可以this.静态变量,类名和this.可以省略.
//        System.out.println("构造方法中,用this.静态成员变量 方式,我叫"+this.name);
//        System.out.println("构造方法中,用类名.静态成员变量 方式,我叫"+Student.name);
//        System.out.println("构造方法中,省略类名和this. 方式,我叫"+name);
//        //构造方法直接调用局部变量
//        int id = 1001;
//        System.out.println("构造方法中,直接调用局部变量,我的学号是"+id);
//

    }
    //定义一个无参数的实例方法
    public void shiLi(){
        //实例方法中调用实例变量
        //实例方法中可以访问实例变量,默认this.实例变量,this.可以省略。
        System.out.println("实例方法中,用this.实例变量 方式,我今年"+this.age+"岁");
        System.out.println("实例方法中,省略this.实例变量,我今年"+age+"岁");
        //构造成员变量隐藏
        int age = 45;
        //如果出现成员变量隐藏,那么调用成员变量的时候this.不可省略
        System.out.println("实例方法中,成员变量隐藏,用this.实例变量 方式,我今年"+this.age+"岁");
        System.out.println("实例方法中,成员变量隐藏,省略this. 方式,我今年"+age+"岁");

        //实例方法中调用静态成员变量
        //实例方法中可以访问静态成员变量,默认类名.静态变量,也可以this.静态变量,类名和this.可以省略.
        System.out.println("实例方法中,用this.静态成员变量 方式,我叫"+this.name);
        System.out.println("实例方法中,用类名.静态成员变量 方式,我叫"+Student.name);
        System.out.println("实例方法中,省略类名和this. 方式,我叫"+name);
        //实例方法直接调用局部变量
        int id = 1001;
        System.out.println("实例方法中,直接调用局部变量,我的学号是"+id);


    }
    //定义一个无参数的静态方法
    public static void staticFangFa(){
        //静态方法中调用实例变量
        //静态方法中不可以访问实例变量
        //System.out.println("静态方法中,用this.实例变量 方式,我今年"+this.age+"岁");//不能访问实例变量
        //System.out.println("静态方法中,省略this.实例变量,我今年"+age+"岁");//不能访问实例变量
        //构造成员变量隐藏
        int age = 45;
        //如果出现成员变量隐藏,那么调用成员变量的时候只能通过对象
        //System.out.println("静态方法中,成员变量隐藏,用this.实例变量 方式,我今年"+this.age+"岁");//不能使用this.
        System.out.println("静态方法中,成员变量隐藏,省略this. 方式,我今年"+new Student().age+"岁");

        //静态方法中调用静态成员变量
        //静态方法中可以访问静态成员变量,默认类名.静态变量,类名可以省略.
        //System.out.println("静态方法中,用this.静态成员变量 方式,我叫"+this.name);//不能使用this.
        System.out.println("静态方法中,用类名.静态成员变量 方式,我叫"+Student.name);
        System.out.println("静态方法中,省略类名 方式,我叫"+name);
        //静态方法中直接调用局部变量
        int id = 1001;
        System.out.println("构造方法中,直接调用局部变量,我的学号是"+id);

    }
}
public class TeatMain {
    public static void main(String[] args) {
        //创建一个Student类的对象
        Student stu=new Student();
        stu.shiLi();
        //用类名调用静态方法
        Student.staticFangFa();
    }
}

二、同一个JAVA类中的方法可以调用方法

       1.构造方法中调用其他的构造方法、实例方法、静态方法

           (1)、构造方法可以调用其他构造方法,用new关键字

           (2)、构造方法可以调用实例方法,用this.实例方法,this.可以省略

           (3)、构造方法可以调用静态方法,用类名.静态方法,或this.静态方法,类名和this.可以省略

       2.实例方法中调用构造方法、其他实例方法、静态方法

           (1)、实例方法可以调用构造方法,用new关键字

           (2)、实例方法可以调用其他的实例方法,用this.实例方法,this.可以省略

           (3)、实例方法可以调用静态方法,用类名.静态方法,或this.静态方法,类名和this.可以省略

       3.静态方法中调用构造方法、其他静态方法

           (1)、静态方可以调用构造方法,用new关键字

           (2)、静态方法不能调用实例方法,不能使用this.

           (3)、静态方法可以调用其他静态方法, 用类名.静态方法,类名可以省略

public class People {
    //定义一个构造方法
    public People(){
        System.out.println("我是无参数的构造方法");
        //构造方法中,调用实例方法
        //构造方法中可以访问当前类中实例方法,默认this.实例方法,this可以省略
        this.shiLi();
        shiLi();
//        //构造方法中调用静态方法
//        //构造方法中调用静态方法,可以用类名,也可以用this. 类名和this.都可以省略
//        this.staticFangFa();
//        People.staticFangFa();
//        staticFangFa();
//        //调用构造方法,不能掉自己,否则会死掉,用new关键字创建对象调用
        new People("李四");

    }
    public People(String name){
        System.out.println("我是有参数的构造方法,参数是"+name);
    }
    //定义一个实例方法
    public void shiLi(){
        System.out.println("我是实例方法");
        //调用有参数的构造方法
//        new People("张三");
//        //实例方法调用有参数的实例方法
//        //实例方法调用同一java类中的其他实例方法,可以通过this.实例方法名称,this.可以省略
//        this.shiLi1(2234);
//        shiLi1(4455);
//        //实例方法调用静态方法
//        //实例方法中可以调用同一java类中的静态方法,可以通过类名.静态方法名称,也可以使用this.静态方法,this. 和类名可以省略
//        People.staticFangFa();
//        this.staticFangFa();
//        staticFangFa();
    }
    public void shiLi1(int id){
        System.out.println("我是有参数的实例方法,参数是"+id);
    }
    //定义一个静态方法
    public static void staticFangFa(){
        System.out.println("我是静态方法");
        //静态方法中调用构造方法,通过new关键字
        new People();
        //静态方法中调用实例方法
        //静态方法中不能调用实例方法
       // this.shiLi();
        //shiLi();
        //静态方法中调用其他静态方法
        //用类名可以调用其他静态方法,类名可以省略
        People.staticFangFa1(23);
        staticFangFa1(45);

    }
    public static void staticFangFa1(int age){
        System.out.println("我是有参数的静态方法,参数是"+age);
    }
}
public class TeatMain {
    public static void main(String[] args) {
       People pe = new People();
       pe.shiLi();
       People.staticFangFa();
    }
}

总结:

一、同一JAVA类中方法调用变量:

       1、构造方法、实例方法均可调用实例变量,通过this.实例变量,静态方法不能调用实例变量

       2、构造方法、实例方法、静态方法均可调用静态变量

             构造方法与实例方法均可通过:类名.静态变量  / this.静态变量 (类名、this.可以省略)

             静态方法只能通过类名.静态变量 (类名可以省略),不能使用this.

       3、构造方法、实例方法、静态方法均可调用自己的局部变量,直接局部变量名称

二、同一JAVA类中方法调用方法:

       1、构造方法、实例方法、静态方法均可调用构造方法,都是通过关键字new实现

       2、构造方法、实例方法均可调用实例方法:都是通过this.实例方法,this.可以省略

             静态方法不能调用实例方法

       3、构造方法、实例方法、静态方法均可调用静态方法

             构造方法与实例方法均可:类名.静态方法 / this.静态方法 ,类名与this.可省略

             静态方法:类名.静态方法,类名可以省略

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在多线程,如果一个数组对象需要被传递给另外一个线程进行操作,为了保证数据的安全性和一致性,需要进行同步处理。 常见的同步方法有: 1. 使用锁:在传递数组对象时,使用互斥锁(mutex)对共享数据进行保护,确保只有一个线程在访问和修改数组对象,其他线程都需要等待锁的释放才能获取数据。这种方法保证了数据的安全性,但是由于锁的竞争可能会导致性能瓶颈。 2. 使用信号量:信号量是一种计数器,用于控制访问共享资源的线程数量。在传递数组对象时,可以利用信号量来确保同时只有一个线程可以访问和修改数组对象,其他线程都需要等待信号量的释放才能获取数据。这种方法也能够保证数据的安全性,但是需要注意信号量的使用,过多的等待可能会导致性能瓶颈。 3. 使用读写锁:读写锁是一种特殊的锁,允许多个线程同时读取共享资源,但只允许一个线程进行写操作。在传递数组对象时,可以使用读写锁来保证多个线程可以同时访问数组对象的内容,但只有一个线程可以修改数组对象的内容。这种方法能够提高读取数据的性能,但需要注意写操作的同步问题。 以上三种方法都能够保证数据的安全性和一致性,具体选择哪种方法需要根据具体情况来决定。同时,还需要注意避免死锁等问题的发生,确保多线程程序的稳定性。 ### 回答2: 当一个数组对象需要被传递给另外一个线程时,我们可以使用同步机制来确保线程安全。 首先,我们可以为该数组对象创建一个锁(Lock)对象或是创建一个与该数组关联的监视器对象(monitor)。这个锁或监视器对象可以在多个线程之间起到互斥的作用,以保证在同一时间只有一个线程可以访问该数组对象。 接下来,在传递数组对象给另外一个线程之前,我们需要在代码确保对该数组对象的访问是安全的。这可以通过以下几种方式来实现: 1. 使用synchronized关键字:在访问数组对象的代码块或方法前加上synchronized关键字,确保同一时间只有一个线程可以访问该代码块或方法。 2. 使用ReentrantLock类:创建一个ReentrantLock对象,然后在访问数组对象的代码块调用其lock()方法获取锁,在处理完数组对象后调用unlock()方法释放锁。 3. 使用Condition对象:创建一个Condition对象,和一个与之关联的Lock对象。通过调用Condition对象的await()方法使线程等待,然后在另外一个线程通过调用signal()或signalAll()方法来唤醒等待的线程。 无论使用哪种同步机制,我们都需要确保在传递数组对象给另外一个线程之前先获取锁或进入等待状态,并在处理完数组对象后释放锁或唤醒等待的线程。 总之,通过使用适当的同步机制,我们可以确保一个数组对象在多个线程之间的安全传递和处理。 ### 回答3: 如果要将一个数组对象传递给另一个线程进行操作,并确保同步,可以采用以下步骤: 1. 使用锁机制:在传递数组对象的过程,对共享数据加锁,使得只有一个线程能够访问该数组。可以使用Java的synchronized关键字来实现锁机制,或者使用ReentrantLock类提供的锁。 2. 确保修改和访问的原子性:如果在传递过程数组对象会被修改,需要确保修改的原子性,以避免多个线程同时修改导致数据不一致。可以使用synchronized关键字或者利用ReentrantLock提供的锁来实现原子性修改。 3. 使用wait()和notify()方法进行通信:如果在传递数组对象的过程希望等待某个条件满足后再进行操作,可以使用wait()和notify()方法来进行线程之间的通信。通过在传递过程判断条件并调用wait()方法等待,同时使用notify()方法通知等待的线程条件已满足,从而实现同步。 4. 使用CountDownLatch进行同步:可以借助于CountDownLatch类进行同步操作。在传递数组对象的线程调用CountDownLatch的await()方法等待其他线程操作完成,当其他线程完成操作后,再调用CountDownLatch的countDown()方法,通过计数器减1的方式通知等待的线程,从而实现同步。 需要根据具体情况和需求选择合适的同步方式,确保在数组对象传递过程线程之间能够正确同步。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值