今天学习主要学习的的是静态变量的概念及其使用。下面是我关于静态变量的一些看法。
静态变量通俗的说是属于类的属性。如果一个类要进行实例化,通过实例可以调用静态变量,类名也可以直接调用静态变量。如果实例化两个类的话。被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);
}
}
今天就写到了。