java 复习面向对象3

this关键字的使用
1.表示类中的属性
  public class Person()
  {
     private String name;
     private int age;

     public Person(String name,int age)//明确参数的含义 与类中的属性不沾边
     {
        this.name = name;   //this表示指定的是类中的属性
 this.age = age;
     }
  }
  在大部分操作的时候,用this.属性名称表示类中的属性.

2.可以使用this调用类中的构造方法
  如果在一个类中存在多个构造方法,可以使用this关键字在构造方法间互相调用
  public class Person()
  {
     private String name;
     private int age;

     public Person()    //无参数的构造方法
     {
       System.out.println("对象实例化");
     }
     public Person(String name)
     {      
        System.out.println("对象实例化");
        this.name = name;  //有一个参数的构造方法
     }
     public Person(String name,int age)//两个参数的构造方法
     {
        System.out.println("对象实例化");
        this.name = name;
 this.age = age;
     }
  }
  代码重复
   public Person()    //无参数的构造方法
     {
       System.out.println("对象实例化");
     }
     public Person(String name)
     {    
        this.Person();     //this调用无参数的构造方法
        this.name = name;  //有一个参数的构造方法
     }
     public Person(String name,int age)//两个参数的构造方法
     {
        this.Person(name);     //this调用有一个参数的构造方法
        this.name = name;
 this.age = age;
     }
   注意: this调用构造方法的语句只能放在构造方法的首行.
         this调用构造方法的时候,至少有一个构造方法是不用this调用的

3.表示当前对象
  可以使用this和引用传递进行两个对象是否相等的判断.
  若两个对象的属性完全一样 则两个对象相同,或者两个对象的地址一样,则两个对象
  相等.
  在类中加入比较的方法
  public boolean compare(Person per)
  {
      //调用此方法时 里面存在两个对象:当前对象和传入的对象
      Person p1 = this;//当前的对象
      Person p2 = per;//表示传进来的对象

      if(p1 == p2)   //判断是不是同一个对象
      {
         return true;
      }

      if(p1.name.equals(p2.name)&&p1.age == p2.age)
      {
         return true;  //两个对象相等
      }
      else
      {
         return false;
      }
  }


static关键字
   在java中可以使用static声明属性和方法,用static声明的方法称为类方法
  
   1.用static声明全局属性,为所有对象所共享的.一个对象修改了static声明的
     属性时,则所有对象的属性将修改.
     每一个对象都拥有各自的堆栈空间,堆内存空间中保存每一个对象的各自的属性
     但是所有的static属性是保存在了全局数据区之中,所有的对象指向全局数据中的
     一个内容,所以当一个对象修改之后,所有对象的内容将全部变化.

     java中内存区域:
     栈内存:可以保存对象的名称(保存访问的堆内存的地址)
     堆内存:保存每个对象的具体属性
     全局数据区:保存static类型的属性
     全局代码区:保存所有方法的定义
   2.用static声明方法时
     直接用类名称.方法名调用
     注意:使用static方法时,在此方法中不能调用非静态的属性和非静态的方法
          因为static属性或方法可以在对象没有实例化的时候就直接调用了
   而非静态的属性和方法在实例化对象后才能被使用
   3.static的其他应用:
     使用static属性统计一个类到底产生了多少个实例化对象
     使用static为对象进行自动的编名操作
     eg:
     public class Demo
     {
       static int count;
       public Demo()
       {
          count++;
       }
     }
 
    
main方法的说明
   public static void main(String args[])
   public:表示方法可以被外部调用
   static:表示方法可以由类名称直接调用
   void:主方法是程序的起点,做一不需要任何的返回值
   main:系统规定好默认调用的方法名称,执行的时候,默认找到main方法名称
   String args[]: 表示的是运行时的参数  当编译好文件时,
                 参数传递的方式是:java 类名称 参数1 参数2...
   用空格分开,若参数中有空格 则用""括起来
   eg:
    public static void main (String args[])
    {
       if(args.leng!=3)  //判断参数的个数
       {
          System.exit(1);  //退出系统,参数非0就退出
       }
       for(int i=0;i<args.length;i++)
       {
          System.out.print(args[i]);
       }
    }
     
   
代码块:
    所谓代码块是指使用"{}"括起来的一段代码,根据位置的不同,代码块可以分为
    四种:普通代码块,构造块,静态代码块,同步代码块(多线程)

    直接定义在方法中的代码块称为普通代码块:
     public static void main(String args[])
     {
        {
    int x = 30;//就属于一个局部变量
    System.out.print(x);
 }

 int x = 100;  //与局部变量相同
     }

     构造块:将代码直接定义在类中
     若没有实例化对象,则构造块是不执行的
     class Demo
     {
         {
     System.out.println("构造块")
  }

  public Demo()
  {
    System.out.print("构造方法")
  }
     }
     构造块优先于构造方法执行,且执行多次,只要一有实例化对象的产生,就执行
     构造块中的内容

     静态代码块:直接使用static关键字声明的代码块就称为静态代码块
     class Demo
     {
        {
    System.out.println("构造块");
 }

 static
 {
    System.out.println("静态代码块");  
 }

 public Demo()
 {
   System.out.println("构造方法");
 }
     }
     public class Demo1
     {
        static
 {
    System.out.println("在主方法所在的类中定义的静态代码块");
 }

 public static void main(String args[])
 {
     new Demo();
 }
     }
    静态代码块优先于主方法执行,如果在普通类中定义的静态块,优先于构造块执行
    不管有多少个实例化对象产生,静态代码块只执行一次,静态代码块的主要功能
    就是为静态属性初始化.
    执行顺序:
    静态代码块(主方法所在的类)>主方法>构造块>构造方法
   
    用静态代码块可以代替main方法输出hello world!!

    public class Print
     {
        static
 {
   System.out.print("hello world!!!");
   System.exit(1);  //如果不退出会有找不到main方法的提示
 }
     }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值