static&&this

2020-04-19  本文已影响0人  雪上霜
image.png
image.png
//什么时候声明为实例,什么时候声明为静态
//如果这个类型的所有对象的某个属性都是一样的,不建议定义为实例变量,浪费内存空间,建议使用定义为static
public class StaticTest{
    public static void main(String[] args){
            Chinese c1 = new Chinese("11","张三");
            Chinese c1 = new Chinese("11","李四");
    }
}

class Chinese{
    //身份证号
    String idCard;  //一个对象一份,每个人的身份证号不同
    //姓名
    String name;    //一个对象一份,一个人一个姓名
    //国籍
    static String country = "中国";//对于此类来说,不会随对象改变。是整个类的特征。
    //static默认值在类加载是初始化,不需要new对象,存储在方法区。
    
    public Chinese{
    
    }
    public Chinese(String s1,String s2){
        idCard = s1;
        name = s2;
    }
}
image.png
public class StaticTest{
    public static void main(String[] args){
        StaticTest st = new StaticTest();
        st = null;
        st.doSome();    //这个会转换为StaticTest.doSome();
        
        st.doOther();   //空指针异常。
        
    }
    //可以使用类名.访问,也可用对象.访问(不建议)
    public static void doSome(){
        System.out.println("doSome");
    }
    //通过对象.访问
    public void doOther(){
        System.out.println("doOther");
    }
}
//使用static关键字可以定义:静态代码块
//什么事静态代码块:
static {
  java语句;
}
//一个类中可以编写多个静态代码块。
//静态代码块在类加载时执行,并且只执行一次,在main之前执行,按照自上而下的顺序执行。
//静态代码块的作用:不常用;实际上是给Java程序员的一个特殊的时刻,一个时机:类加载时机。
//记录日志代码,类何时加载到JVM中?可以写到静态代码块中。
public class StaticTest{
  public static void main(String[] args){
      
  }
}
  public class StaticTest{
    //类加载时初始化
    static int i = 100;
    //类加载时执行
    static{
        System.out.println(i);
    }
    int k;
    static {
        System.out.println(k);//类加载时k还不存在,k在构造后才存在。
    }
    
    static {
        System.out.println(name);//name在后面,执行时机相同,按顺序执行,name还不存在
    }
    
    static String name = "张三";
    
    public static void main(String[] args){
        
    }
  }
image.png image.png
//this在构造方法中区分局部变量和实例变量。
public class ThisTest{
  public static void main(String[] args){
      Student s = new Student();
      s.setNo(11);
      s.setName("ag");
      System.out.println(s.no);
      System.out.println(s.name);
      
  }
}

class Student{
  //学号
  private int no;
  //姓名
  private String name;
  public Student(){
      
  }
  public Student(int no,String name){
      this.no = no;
      this.name = name;
  }
  public int getNo(){
      return no;
  }
  
  public String getName(){
      return name;
  }
  
  public void setNo(int no){
      this.no = no;   //this的作用区分局部变量和实例变量
  }
  public void setName(String name){
      this.name = name;
  }
}

//面向对象思想程序:

public class Homewrok{
    public static void main(String[] args){
            Account a = new Account("111",2200,1.23);
            Customer c = new Customer("Jamc",a);
            
            c.getAct().deposit(100);
            c.getAct().withdraw(960);
            c.getAct().withdraw(2000);
    }
}

class Account{
    private String id;
    private double balance;
    private double annualInterestRate;
    
    //
    public Account(){
        
    }
    public Account(String id,double balance,double annualInteretRate){
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }
    public String getId(){
        return id;
    }
    public double getBalance(){
        return balance;
    }
    public double getAnnualInterestRate(){
        return annualInterestRate;
    }
    
    
    public void setId(String id){
        this.id = id;
    }
    public void setBalance(String balance){
        this.balance = balance;
    }
    public void setAnnualInterestRate(String annualInterestRate){
        this.annualInterestRate = annualInterestRate;
    }
    
    public void deposit(double money){
        //this.balance += money;
        this.setBalance(this.getBalance() + money);
    }
    
    public void withdraw(double money){
        if(money > this.getBalance()){
            System.out.println("余额不足,取钱失败");
            return;
        }
        //this.balance -= money;
        this.setBalance(this.getBalance() - money);
    }
}

class Customer{
    private String name;
    priavte Account act;
    
    public Customer(){
        
    }
    
    public Customer(String name,Account act){
        this.name = name;
        this.act = act;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public void setAct(Account act){
        this.act = act;
    }
    
    public Account getAct(){
        return act;
    }
}
public class Homework{
    public static void main(String[] args){
        Student s1 = new Student();
        
    }
}

class Student{
    private String name;
    private int age;
    private String address;
    private String zipoode;
    private String mobile;
    
    public Student(){
        
    }
    
    public Student(String name, int age, String address,String zipoode, String mobile){
        this.name = name;
        this.age = age;
        this.address = address;
        this.zipoode = zipoode;
        this.mobile = mobile;
    }
    
    //get set
    
    public setName(String name){
        this.name = name;
    }
    
    public setAge(String age){
        this.age = age;
    }
    
    public setAddress(String address){
        this.address = address;
    }
    
    public setZipoode(String zipoode){
        this.zipoode = zipoode;
    }
    
    public setMobile(String mobile){
        this.mobile = mobile;
    }
    
    public void getName(){
        return name;
    }
    
    public void getAge(){
        return age;
    }
    
    public void getAddress(){
        return address;
    }
    
    public void getZipoode(){
        return zipoode;
    }
    
    public void getMobile(){
        return mobile;
    }
}

大总结

类体{
    实例变量;
    实例方法;
    
    静态变量;
    静态方法;
    
    构造方法;
    
    静态代码块;
    实例代码块;
    
    方法(){
        int i = 100;
    }
}

public class Review{
    public static void main(String[] args){
        int i  = 100;
        Student s = new Student();
        s.study();
        s.eat();
        
    }
}

class Student{

    static {
        System.out.println("gdnzv");
    }
    private int no;
    private String name;
    static String job = "学习";
    
    {
        System.out.println("fff");
    }
    
    public Student(){
        this(100,"张三");
    }
    
    public Student(int no,String name){
        this.no = no;
        this.name = name;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public void setNo(String no){
        this.no = no;
    }
    
    public String getNo(){
        return no;
    }
    
    public void study(){
        System.out.println(this.name);
        System.out.println(name);
        System.out.println(getName());
        System.out.println(this.getName());
        //this.eat();
        eat();
        Student.m1();   //类名可以省略
        m1();
    }
    
    pblic static void m1(){
        System.out.println("1r32r"+job);//自动在job前添加类名。
    }
    
    public void eat(){
        System.out.println();
    }
    
}
public class Review{
    
    int i;
    static int j;
    
    public void m1(){
        
    }
    
    public void m2(){
    
    }
    
    public void x(){
        m1();//都可以。
        m2();
        m3();
        m4();
        T.t1();
        T t = new T();
        t.t2();
    }
    
    public static void m3(){
    
    }
    
    public static void m4(){
    
    }

    //main方法是静态的,JVM调用main方法的时候直接采用的是类名.的方法。没有this。
    //m1()和m2()是实例方法,按照Java语法规则来说,实例方法必须new对象,再通过引用.的方式访问。
    public static void main(String[] args){
        m1();//错误
        m2();//错误
        m3();   //自动识别静态方法,自动Review.m3();
        m4();
        //i不能访问,j可以。
        //调用实例变量或方法先new。
    }
}

class T{

    public static void t1(){
        
    }   
    
    public void t2(){
    
    }
}
上一篇 下一篇

猜你喜欢

热点阅读