对象和类的关系,内存分析之栈,堆,方法区(Java学习第四章)


public class TestStu{
    int id;
    String name;
    int age;
    
    Computer comp;   //comp是对象,可以通过‘.’这个操作符访问对象的相关属性。
    
    void study() {
        System.out.println("电脑是"+comp.brand+"价格是"+comp.price+"元");
    }
    
    void play() {
        System.out.println("在打游戏!!");
    }
    
    
    //构造方法,用于创建这个类的对象。无参数的构造方法可以由系统自动创建。
    TestStu(){
        
    }
    
    
     //   main方法是程序执行的入口,必须有。
    public static void main(String[]args) {
        TestStu Stu=new TestStu();                 //创建一个对象
        
        Stu.id=12;
        Stu.age=18;
        Stu.name="TimeKeeper";
        
        //Stu.study();                          //brand未赋值,故不可在此处执行输出
        
        Computer c1=new Computer();                //创建对象,配电脑需要先建一个电脑
        
        c1.brand="戴尔!!";                        //给Computer类的brand串赋值
        c1.price=5000;                            //给Computer类的price赋值
        
        Stu.comp=c1;          //这儿建好了一个对象,把对象给Stu的“comp”属性。
        
        Stu.play();
        Stu.study();           //执行play和study方法
    }
}

class Computer{
    String brand;
    int price;
}

 

 

/**运行结果如下

在打游戏!!
电脑是戴尔!!价格是5000元

**/

 

错误代码:

 

public class TestStu{
    int id;
    String name;
    int age;
    
    Computer comp;  //comp是对象,可以通过‘.’这个操作符访问对象的相关属性。
    
    Computer c1=new Computer();

    c1.brand="戴尔!!";                        //给Computer类的brand串赋值
    c1.price=5000;                            //给Computer类的price赋值

/**注意:可以在类的方法或者函数中调用其他类的属性。

赋值可以在几个地方,比如static程序块中、main函数中,获取其他方法中。

以上代码直接在类的非方法块中调用别的类的属性,是错误的 !!**/
    
    void study() {
        System.out.println("我在学习java!!用的电脑是"+c1.brand+"价格是"+c1.price+"元!!");
    }
    
    void play() {
        System.out.println("我在玩游戏!!");
    }

 

网上问题:java类中new一个类后,为什么不能直接调用方法么?在类方法中就可以。

class A{

    public void print(){

        System.out.println("A的print方法");    

    }

}

Class B{

    A a = new A();

    a.print();//这里为什么不能调用print方法呢?

解答:

  1. Java 类定义写在一对花括号内。
  2. 类定义花括号内的内容仅能包括, 声明 属性方法, 以及  静态代码块 。
  3. 调用某一个方法的代码,必须写在某一个方法体或静态代码块内。
  4. 比如,有些代码必须在项目启动的时候就执行的时候, 就 需要使用静态代码块, 这种代码是主动执行的。因此,将你的代码 a.print();放到静态代码块内,程序启动时就会被主动执行。
  5. class A{
        public void print(){
            System.out.println("A的print方法");    
        }
    }
    
    public class B{
       static A a = new A(); 
       static {
        a.print();//启动的时候就执行的时候,主动执行
        }
        public static void main(String args[]){
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值