Java笔记之 类

  1. 全局变量有默认值(new对象中会有初值0),局部变量没有默认值
  2. 全局变量只能声明和创建语句,不能有赋值语句。局部变量可以有赋值语句
    public class demo{
        public static void main(String[] args) { 
    		int x; 
    		x = 1;   //在main方法中是正确的,出了main方法就错了 
    		int y = 1;
        }
    }
    

  3. 构造方法没有类型,必须要以类的名字来命名。如果没有声明,就默认声明一个没有参数没有语句体的构造方法。
  4. 类中可以有多个构造方法,但是参数必须要不同,此时在创建对象的时候可以选用不同的构造方法
  5. 用new声明的对象叫做对象的一个引用,分配给对象的变量叫做对象的实体
    //new a = Zimu()
    //(a是引用)  (Zimu是一个实体)

  6. 引用类型的参数传值:当一个类声明的两个对象有相同的引用(对象名相同),那么二者就有完全相同的变量,指向相同的实体。当一个对象操作其引用的变量发生改变,另一个也会改变。除非重新创建一个新的引用,则原引用不会受影响。(P70例7)
  7. 对象的组合:原理和6差不多
  8. this.成员变量:用该方法赋值后,说明该类中其他的该成员变量也都是这个值(因此this不可以出现在类方法中!,同时还有个原因是因为类方法可以通过类名直接调用,此时任何对象可能还没有创建
    class Tom{
           private int x = 120;
           protected int y = 20;
           int z = 11;
           void showX(){
                 System.out.println(x);
    }
           public void setX(int x){
                 this.x = x;
                 System.out.println(x);
    }
    } 
    
    public class E {
              public static void main(String arg[]) {
               Tom tom = new Tom();
               Tom jiafei = new Tom();
               tom.setX(22);     //22
               tom.showX();      //22
               jiafei.showX();   //120
        }
    }
  9. 访问权限:

    成员变量成员方法构造方法可以是上面的任何一个访问权限。不可以用protected和private修饰类。

  10.  继承:子类可以调用父类的非private方法。

  11. 类变量:当用new创建多个对象的时候,若改变其中一个对象的这个类变量的值,其他对象的该类变量值都会改变。  类方法:类方法不可以操作实例变量,因为在类创建对象之前,实例成员变量还没有分配对象。方法中声明的局部变量不可以用static修饰。

  12. 方法重载:一个类中可以有多个名字相同的方法,但是参数必须不同(参数个数或参数类型不同)

  13. 构造方法可以被重载,static方法也可以被重载。不可以用static修饰构造方法(类方法被加载到相应的内存后就有了相应的地址,而实例方法只有用构造方法声明后才有相应地址。二者作用矛盾)static方法可以进行重写操作,但是重写后,子类对象的上转型对象不能调用子类的static方法,而只能调用父类的static方法

    class Animal{
    
        public static int get(int n){
            return n+10;
        }
    
        public int see(int n){
            return n+10;
        }
    }
    
    class Dog extends Animal {
    
        public static int get(int n){
            return n*10;
        }
    
         public int see(int n){
            return n*10;
    
        }
    }
    
    public class lei {
    
       public static void main(String args[]){
    
           Animal animal = null;
           Dog dog = new Dog();
           animal = new Dog();       
           System.out.printf("%d,%d,%d",animal.get(10),dog.get(10),animal.see(10)); //20,100,100
    
       }
    }

  14. 方法重写:子类的方法和父类方法类型 名字 参数完全相同。这时父类的方法会被隐藏(变量的隐藏:自类变量和父类变量名字相同)。这时子类就不可以调用父类被隐藏的方法和变量,除非用super()。

  15. **关于子类操作的变量:子类继承的方法 :只可操作子类继承和隐藏的成员变量。  子类新定义的方法: 可操作子类继承和子类新声明的成员变量,不可操作被隐藏的成员变量和方法(除非super())   子类重写的方法 :同新定义的。

  16. 如果想在子类中使用被子类隐藏的成员变量或方法,就要用super.x或super.play()。super调用父类的构造方法:子类是不继承父类的构造方法的。必须要用super()来调用,且参数要与父类的参数设置一致,且必须是子类构造方法中第一句。只是,当父类构造方法为默认的时,子类构造方法通常默认有super(),因此不必写。但是当父类的构造方法定义了一个或多个构造方法是,要想子类不写super,就必须要规定一个无参数的构造方法。子类构造方法中不可以有多条super调用父类的某个构造方法的语句!super关键字形成的语句必须是子类构造方法中的第1条语句(×)  子类可以用super关键字调用父类的父类中的方法(×)

  17. final关键字:类不可以被继承 不可以修饰构造方法 不可以被子类重写 他可以认为是一个常量,但是没有默认值,必须要指定该常量。不允许用final和abstrat同时修饰一个方法或类。final方法可以是static方法。

  18. 对象的上转型对象(可参考P127例子10):简而言之就是父类用子类的方法。但是对象的上转型对象只可以操作两个:1.隐藏或继承的变量(原属于父类) 2.继承或重写的对象(是子类的,表现出多态

    class 类人猿{
         int m = 10
       void cryspeak (String s){
           System.out.println(s);
        }
    }
    
    class People extends 类人猿{
        int m = 100;
       void cryspeak (String s){
           System.out.println(s);
          }
    }
    
    public class E{
      public static void main(String arg[]){
           类人猿 monkey;   //或 类人猿 monkey = null;
           People geng = new People();
           monkey = geng; //monkey 是People对象geng的上转型对象
           //还可直接:类人猿 monkey = new People();
           monkey.cryspeak("啊啊啊");//等价于geng.cryspeak("啊啊啊");
           monkey.m  //输出是10
  19. abstract方法 只允许声明,不允许实现,因此不可以用new创建该类的对象。没有方法体。不可以用static修饰abstract方法(即abstract方法必须是实例方法)。abstract类中可以有abstract方法,也可以有非abstract方法。非abstract类中不可以有abstract方法。 如果一个abstract类的子类为非abstarct类,那么它必须重写父类的方法。

  20. 方法局部变量的命名和方法的形参不能相同。  当成员变量命名与方法的形参或局部变量一样时,即使形参或局部变量的赋值与成员变量不同,成员变量也不会变(Java的就近原则),除非有this声明。

    public class Mainceshi {
        private String a = "成员变量";
     
        public void GetA() {
            String a = "局部变量";
            System.out.println(this.a);
            System.out.println(a);
        }
     
        public static void main(String[] args) {
            Mainceshi mainceshi = new Mainceshi();
            mainceshi.GetA();    //成员变量 局部变量
        }
    }
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值