java类名直接访问静态变量为啥不通过,提示Demo3.java:11: 不是语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类名直接访问静态变量为啥不通过,提示Demo3.java:11: 不是语句相关的知识,希望对你有一定的参考价值。

class Demo3

int age;
static String name="abc";
public static void method()

System.out.println(name);

public static void main(String[] args)

Demo3.name;

参考技术A 编译不通过不是类名直接访问静态变量的原因,和访问权限没有关系。
是因为 Demo3.name这句代码用分号结尾了,你并没有对name属性做任何操作。
System.out.println(Demo3.name)就可以编译通过了。
必须对 Demo3.name这个属性进行操作,例如输出,赋值等。本回答被提问者采纳
参考技术B 必须拿个变量去接收,在调用的时候你不用变量接收这个name的值,你之后也没法再去取到name的值了,那你此次调用就毫无意义,String name=Demo3.name; 参考技术C Demo3.name只是一个变量,不是一个语句 参考技术D String s=Demo3.name;
你前面得加个让它等于什么。

继承,修饰符

static静态修饰符

  一)、static可用来修饰

    1、成员变量:静态变量,可以直接通过类名访问

    2、成员方法:静态方法,可以直接通过类名访问

    3、代码块:静态代码,当java虚拟机加载类时,就会执行代码块

  二)、类的成员变量

    1、类变量(静态变量)

      A、被static修饰的变量

      B、在内存中只有一个拷贝

      C、类内部,可以在任何方法内直接访问静态变量

      D、其它类中,可直接通过类名访问

    2、实例变量

      A、没有被static修饰的变量

      B、每创一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

    3、static方法

      A、静态方法:可直接通过类名访问

        a、静态方法中不能使用this和super

        b、不能直接访问所属类的实例变量和实例方法

        c、可直接访问类的静态变量和静态方法

      B、实使方法:通过实例访问

        可直接访问所属类的静态变量、静态方法、实例变量和实例方法

      C、静态方法必须被实现

  三)、代码块

    1、如果对象不创建,则普通代码块不能够被执行,当然,普通方法也无法调用;

    2、如果对象不创建,静态代码块依然能够被执行,而且,静态方法可直接通过类调用;

    3、说明,普通属性、方法、代码块是对象级别的;

      静态属性、方法、代码块是类级别的;

    PS:

      JVM加载静态代码块时,如果有多个静态代码块时,会按顺序执行,但静态代码码只会被执行一次

四、继承

  一)、继承是代码重用的一种方式:将子类共有的属性和行为放到父类中

    1、可以使用super关键字,super代表父类

    2、在子类构造 方法中调用且必须是第一句

    3、不可以访问父类中定义为private的属性和方法

    4、super关键字来访部父类的成员

  二)、子类继承父类的什么

    1、继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里

    2、不在同一个包中,父类中被默认权限修饰符的属性和方法无法被继承

       3、父类中被private修饰的成员、以及父类构造方法无法被继承

 

 

1、使用继承方法实现宠物店(狗、企鹅、猫)

 1 public class Pet {
 2     private String name;//名字
 3     private int health;//健康值
 4     private int macy;//亲密度
 5      
 6     public String getName() {
 7         return name;
 8     }
 9      
10     public void setName(String name) {
11         this.name = name;
12     }
13      
14     public int getHealth() {
15         return health;
16     }
17      
18     public void setHealth(int health) {
19         if(health>100||health<0) {
20             this.health = 60;
21             System.out.println("健康值在0到100之间,您的输入有误,默认60!");
22         }else {
23             this.health = health;
24         }
25     }
26      
27     public int getMacy() {
28         return macy;
29     }
30      
31     public void setMacy(int macy) {
32         if(macy>100||macy<0) {
33             this.macy = 60;
34             System.out.println("亲密度在0到100之间,您的输入有误,默认60!");
35         }else {
36             this.macy = macy;
37         }
38     }
39      
40     public void print() {
41         System.out.println("宠物的自白:");
42         System.out.println("我的名字是:"+this.name+",健康值是:"+this.health+",和主人的亲密度是:"+this.macy);
43     }
44      
45 }
 1 package com.java_1_18_lianxi;
 2  
 3 public class Dog extends Pet{
 4  
 5     private String strain; //品种
 6      
 7     public String getStrain() {
 8         return strain;
 9     }
10  
11     public void setStrain(String strain) {
12         this.strain = strain;
13     }
14  
15     public void print() {
16         super.print();
17         System.out.println("我是:"+this.strain);
18     }
19 }
 1 package com.java_1_18_lianxi;
 2  
 3 public class Penguin extends Pet {
 4  
 5     private String sex;//性别
 6      
 7     public String getSex() {
 8         return sex;
 9     }
10     public void setSex(int sex) {
11         if(sex==1) {
12             this.sex = "Q仔";
13         }else {
14             this.sex = "Q妹";
15         }  
16     }
17      
18     public void print() {
19         super.print();
20         System.out.println("我的性别是:"+this.sex);
21     }
22 }
package com.java_1_18_lianxi;
 
public class Cat extends Pet {
    private String colour;//颜色
 
    public String getColour() {
        return colour;
    }
 
    public void setColour(String colour) {
        this.colour = colour;
    }
 
    public void print() {
        super.print();
        System.out.println("我的毛色是:"+this.colour+"色!");
    }
}
 1 package com.java_1_18_lianxi;
 2  
 3 import java.util.Scanner;
 4  
 5 public class Test {
 6     public static void main(String[] args) {
 7         Scanner cxj = new Scanner(System.in);
 8         Penguin p = new Penguin();
 9         Dog d = new Dog();
10         Cat c = new Cat();
11         System.out.println("欢迎来到宠物店!");
12         System.out.print("请输入要领养宠物的名字:");
13         String name = cxj.next();
14         System.out.print("请输入您要领养宠的类型(1、狗   2、企鹅    3、猫):");
15         int select = cxj.nextInt();
16         switch(select) {
17         case 1:
18             d.setName(name);
19             System.out.print("请选择狗狗的健康值:");
20             d.setHealth(cxj.nextInt());
21             System.out.print("请输入狗狗的亲密度:");
22             d.setMacy(cxj.nextInt());
23             System.out.print("请输入狗狗的品种:");
24             d.setStrain(cxj.next());
25             d.print();
26             break;
27         case 2:
28             p.setName(name);
29             System.out.print("请选择企鹅的健康值:");
30             p.setHealth(cxj.nextInt());
31             System.out.print("请输入企鹅的亲密度:");
32             p.setMacy(cxj.nextInt());
33             System.out.print("请选择企鹅的性别(1、Q仔 2、Q妹):");
34             p.setSex(cxj.nextInt());
35             p.print();
36             break;
37         case 3:
38             c.setName(name);
39             System.out.print("请选择猫猫的健康值:");
40             c.setHealth(cxj.nextInt());
41             System.out.print("请输入猫猫的亲密度:");
42             c.setMacy(cxj.nextInt());
43             System.out.print("请选择猫猫的毛色:");
44             c.setColour(cxj.next());
45             c.print();
46             break;
47         default:
48             System.out.println("您的输入有误!"); 
49         }
50     }
51 }

 

以上是关于java类名直接访问静态变量为啥不通过,提示Demo3.java:11: 不是语句的主要内容,如果未能解决你的问题,请参考以下文章

在java中,为啥类实例也能访问静态域?

继承,修饰符

java中为啥要把main方法定义为一个static方法

java中的常量,是否必须定义为static final的呢

为啥Python调用方法,有的前面加类名,有的不加?

在java语言中,静态变量和普通变量有啥区别?