zoukankan      html  css  js  c++  java
  • 2019-05-18 Java学习日记 day8

    1.代码块

    在java中,使用 { } 括起来的被称为代码块

    代码块分类:

    根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)

    常见代码块的应用:

    局部代码块:

      在方法重出现,限定变量的生命周期,及早释放,提高内存利用率

    构造代码块(初始化块):

      在类中方法外出现;多个构造方法中相同的代码存放在一起,每次跳用构造都执行,并且在构造方法前执行

    静态代码块:

      在类中方法外出现,加了static修饰

      在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候执行,并且只执行一次

      一般用于加载驱动

    class demo1_code   //局部代码块
    {
        public static void main (String args []){
        int x=10;        //限定变量的生命周期
        System.out.println(x);
    
        student s1=new student();
        System.out.println("-------------");
        student s2=new student("小黑",20);
        }
    }
    
    class student
    {
        private String name;
        private int age;
        public student(){
        //study();
        System.out.println("空参构造");
        };
    
        public student(String name,int age){
            this.name=name;
            this.age=age;
            System.out.println("有参构造");
        }
        public void setname(String name){
            this.name=name;
        }
        public String getname(){
        return name;
        }
        public void setage(int age){
        this.age=age;
        }
        public int getage(){
        return age;
        }
        {
            study();
        System.out.println("我是代码块");
        //构造代码块:美创建一次对象就会执行一次,优先于构造函数执行
        }
        public void study(){
        System.out.println("我是学生类");
        }
    
        static {  //随着类的加载而加载,并且只执行一次,作用:用来给类进行初始化
            System.out.println("我是静态代码块");
        }
    
    }
    代码块
    class student
    {
        static {
        System.out.println("student  我是静态代码块");
        }
        {
        System.out.println("student  我是构造代码块");
        }
        public student(){
        System.out.println("student  构造方法");
        }
    }
    class demo2_code
    {
        
    
    public static void main (String args []){
           System.out.println("我是主方法");
           student s1=new student();
            student s2=new student();
    
    }
    static{
          System.out.println("主方法的静态代码块");//先加载这个
        }
    }
    例子

    2.继承(extends)

    让类与类之间产生关系,子父类关系

    class demo1_extends
    {
        public static void main (String args []){
          cat c=new cat();
          c.color="黑色";
          c.leg=20;
          c.eat();
    
          animal a=new animal();
          a.seelp();
          a.color="五彩碧蓝的黑色";
        System.out.println(a.color);
    
         System.out.println(c.color);
        }
    }
    
    class animal
    {
     String color;
     int leg;
     public void eat(){System.out.println("吃饭");}
     public void seelp(){System.out.println("睡觉");}
    }
    class cat extends animal          
    {
    
    }
    class dog extends animal
    {
    
    }
    /*
    animal 是父类
    cat和dog都是子类
    */
    案列

    继承的好处:

      提高了代码的复用性

      提高了代码的维护性

      让类与类之间产生了关系,是多态的前提

    弊端:

      类的耦合性增强了

      开发的原则:高内聚,低耦合

      耦合:类与类的关系

      内聚:就是自己的完成某件事情的能力

    继承的特点:

      java的继承不支持多继承

      支持多层继承:子<父<爷

    class demo2_extends
    {
        public static void main (String args []){
        democ c=new democ();
        c.show();
        demob b=new demob();
        b.show();
        }
    }
    class demoa{
        public void show(){
      System.out.println("demoa");
    }
    }
    class demob extends demoa{
        
    }
    class democ extends demob{
      
    }
    案例

    子类只能继承父类所有非私有的成员(成员变量和成员方法)

    子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法

    子类有就不用父类

    面向对象 this,super

    this:代表当前对象的引用,谁来调用我,我就代表谁

    super:代表当前对象父类的引用

    调用成员变量:

      this.成员变量 调用本类的成员变量,也可以调用的成员变量

      super.成员变量 调用父类成员变量

    调用构造方法:

      this(....)调用本类的构造方法

      super(....)调用父类的构造方法

    调用成员方法:

      this.成员方法 调用本类的成员方法,也可以调用父类的方法

      super.成员方法 调用父类的成员方法

    class demo3_extends
    {
        public static void main (String args []){
        son s=new son();
        s.print();
        }
    }
    class father
    {
        int num1=10;
        int num2=20;
    }
    class son extends father
    {
        int num2=30;
        public void print(){
        System.out.println(num1);
        System.out.println(super.num2);
        }
    }
    super继承
    class demo4_extends {
        public static void main (String args []){
            son s1=new son();
            System.out.println(s1.getname()+s1.getage());
            System.out.println("-------");
            son s2=new son("张三",20);
            System.out.println(s2.getname()+s2.getage());
        }
    }
    class father
    {
        private String name;
        private int age;
        public father(){
        System.out.println("father 空参构造方法");
        }
        public father(String name,int age){
        this.name=name;
        this.age=age;
        System.out.println("father 有参构造方法");
        }
        public void setname(String name){
         this.name=name;
        }
        public String getname(){
        return name;
        }
        public void setage(int age){
         this.age=age;
        }
        public int getage(){
        return age;
        }
    }
    
    class son extends father
    {
        public son(){
            this("李四",50);
        System.out.println("son 空参构造方法");
        }
        public son(String name,int age){
        super(name,age);
        System.out.println("son y有参构造方法");
        }
    }
    this/super
    class fu
    {
        public int num=10;
        public fu(){
        System.out.println("fu");
        }
    }
    class zi extends fu
    {
        public int num=20;
        public zi(){
        System.out.println("zi");
        }
        public void show(){
        int num=30;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(super.num);
        }
    }
    
    class demo5_extends
    {
        public static void main (String args []){
        zi z=new zi();
        
        z.show();
        }
    }
    练习题

    重写

    子父类出现了一模一样的方法(返回值可以是子父类)

      应用:当子类需要父类的功能,而功能主题子类有自己特有内容时,可以重写父类中的方法。

          这样,即沿袭了父类的功能,又定义了子类特有的内容

    注意事项:

    父类中私有方法不能被重写:因为父类私有方法子类基本就无法继承;

    子类重写父类方法时,访问权限不能更低:最好一致

    父类静态方法,子类也必须通过静态方法进行重写

     方法重写(override):子类中出现了和父类中方法声明一摸一样的方法,与返回值有关,返回值是一致的(或是子父类)。

     方法重载(overload   :本类中出现的方法名一样,参数列表不同的方法,与返回值无关。

  • 相关阅读:
    真的是最后一次作业了!!!!
    最后一次总结
    作业十一总结?
    作业十一总结
    实验十总结
    作业9总结
    附加作业
    补交第十次作业
    补交第九次作业
    补交第八次作业
  • 原文地址:https://www.cnblogs.com/JungTan0113/p/10887983.html
Copyright © 2011-2022 走看看