回忆构造器及静态变量

    xiaoxiao2021-03-25  19

    今天学习主要学习的的是静态变量的概念及其使用。下面是我关于静态变量的一些看法。

    静态变量通俗的说是属于类的属性。如果一个类要进行实例化,通过实例可以调用静态变量,类名也可以直接调用静态变量。如果实例化两个类的话。被static修饰的变量相当于是两个公共的属性。其中一个实例修改静态变量的话。那么其他的实例再进行调用的话会调用被修改的那个实例。例如以下代码就是可以清晰的显示出静态变量的的相关使用。变量a和变量b是静态变量。

    public class Test1 { public static void main(String[] args) { System.out.println(A.a); A a1 = new A(); A a2 = new A(); System.out.println("修改之前 "+a1.a); System.out.println("修改之前 "+a2.a); a1.a = 12; System.out.println("修改之后 "+a1.a); System.out.println("修改之后 "+a2.a); System.out.println("修改之前 "+a1.c); System.out.println("修改之前 "+a2.c); a1.show(34); System.out.println("修改之后 "+a1.c); System.out.println("修改之后 "+a2.c); B b1 = new B(); b1.get(); B.get1(); b1.get1();

    System.out.println("通过类名直接调用"+A.a); } } class A { static int a = 5; static int b = 7; int c = 45; public void show (int c) { this.c = c; } } class B { int a = 5; static int b = 45; public void get () { System.out.println(a); } static void get1 () { System.out.println(b); } }

    同理可得,静态方法的使用和概念是跟静态变量相同的,可看成一个是静态的属性(静态变量),一个是动态的属性(静态方法)。

    构造器

     当然对于java,类的概念是重中之重,对于类的构造和对象的实现就需要用到构造器。

    构造器具有初始化的作用。    例如public class Person(){      private string name;      private int number;      public Person(string n,int no){      name=n;      number=no;      }      public teach(){}      }    下面我们要对这个类的对象实例化:Person p = new Person();   以上就是构造器的语法了,这里用到了关键字来调用构造器。    new       讲到这里还没有什么可以困扰我们的地方,那么下面我们将借助有关继续的一些例子来继续阐述构造器问题:    假设publicclass People(){       private string name;       private int number ;       private int age;       public do(){}      }        有人也许会问为什么这个People类里面为什么没有定义构造器?其实,java中的JVM已经我们定义了一个无参数的默认构造器,即People(){}    到这里为止,没有任何问题,然而,一旦让People继承OldPeople并实例化,编译器就会报错:       public class People extends OldPeople(){         private string name;         private int number ;         private int age;               public do(){}      public static void mian(string[] args){         OldPeople o=new OldPeople();      }    很抱歉你得到的是一条出错的信息,有人问了,你说OldPeople的构造器是默认的我才这样写,没错,OldOldPeople确实存在这样一个无参的构造器,这样写法换做OldPeople不做People的子类的情况下一定是正确的。         构造器的相关规则:   1.假如一个类没有设置字定义构造器,那么编译器会默认一个无参构造器。    2.在子类调用构造器时,优先调用父类的构造器。    3.假如自定义了构造器,那么默认构造器将不存在。        在上例中,OldPerson调用默认构造器前,编译器自动调用父类Professer的默认构造器,然而,Person有了自定义构造器,所以默认构造器不存在了,编译器报错…………      那么我们该怎么做呢?像下面这样就OK了。         public class People extends OldPeople(){          private string name;          private int number;          private int age;          OldPeople(string n,int no,int age){          super(n,no);          this.age=age;          }          public do(){}       }            这就是在子类中显式的调用父类构造器,注重,super必须是{}中的第一个执行语句。其实我们还有另外一种方法,在People类里面补充一个消失掉的默认构造器,如下:          public class People(){        private string name;        private int number;        public People(string n,int no){        name=n;        number=no;       }       People(){}        public teach(){}      }    构造器尽量使用的功能是传参数的功能,不要包含太多的操作语句即可。

    如下例子:通过构造器将变量a,和变量b的值赋值。之后通过实例化对象进行调用方法。

    import java.util.Scanner; public class Count { public static void main(String[] args) { System.out.println("请输入第一个数字"); Scanner in = new Scanner(System.in); int a = in.nextInt(); System.out.println("请输入第二个数字"); int b = in.nextInt(); Count1 co = new Count1 (a,b); co.add(); co.sub(); co.mul(); co.div(); } } class Count1 { int a ; int b ; public Count1 (int a,int b) { this.a = a; this.b = b; } public void add() { int d = a + b; System.out.println(d); } public void sub() { int e = a - b; System.out.println(e); } public void mul() { int f = a/b; System.out.println(f); } public void div() { int g = a / b; System.out.println(g); } }

    今天就写到了。

    转载请注明原文地址: https://ju.6miu.com/read-300309.html

    最新回复(0)