• 代码块&继承&final关键字


    代码库:

    1.用大括号包起来的一段代码,放在不同的位置,有不同的名称,有不同的作用,有不同的执行时机。

    2.分类在:

    局部代码块

    构造代码块

    静态代码块

    同步代码块(多线程)

    局部代码块:

    1.格式:使用大括号抱起来的一段代码。

    2.位置:方法中

    3.作用:限定变量的生命周期

         在局部代码块中声明的变量,只能在局部变量的范围中使用,一旦出了局部代码块的大括号,变量就不能继续使用了

        某个变量一旦不能使用了,就会被回收,节省内存空间

    4.注意事项:如果实在局部变量代码块中声明了变量,会减少变量的生命周期,出了局部代码块就无法继续使用局部代码块中声明的变量

    如果是在局部代码块中修订了局部代码块外声明的变量,局部代码块结束之后,并不会消除局部代码块对这个变量的修改。

     

    class Demo01_局部代码块 {
    
    
    public static void main(String[] args) {
    
    
    int i = 10;
    
    
    {
    
    
    System.out.println(i);
    
    
    i = 20;
    
    
    int j = 100;
    
    
    System.out.println(j);
    
    
    } 
    
    
    System.out.println(i);//20,局部代码块只对其中声明的变量有效果,对于变量的使用还是和以前一样
    
    
    //System.out.println(j);不能访问局部代码块中声明的变量
    
    
    }
    
    
    }

    构造代码块:

    1.格式:使用大括号包起来的一段代码

    2.位置:类中方法外

    3.作用:用于给成员变量赋初始化值

    4.构造方法代码块的执行说明:

      1.在创建对象的时候执行,由JVM默认调用

         2.在构造方法执行之前执行

        3.任意一个构造方法执行之前,都会执行一次构造代码块的内容

       4.如果每个构造方法都执行的内容,提取到构造代码块中。

    代码示例:

    import java.util.Date;
    import java.text.SimpleDateFormat;
    class Demo02_构造代码块 {
        public static void main(String[] args) {
            Person p = new Person();
            p.show();
    
            Person p2 = new Person("lisi", 24);
            p2.show();
    
            System.out.println("----------------------");
            Man m = new Man("老王");
            m.show();
        }
    }
    class Person {
        private String name;
        private int age;
    
        {
            //name = "zhangsan";
            //age = 23;
            System.out.println("构造代码块");
        }
    
        public Person() {
            System.out.println("空参构造");
        }
    
        public Person(String name, int age) {
            System.out.println("有参构造");
            //this.name = name;
            //this.age = age;
        }
    
        public void show() {
            System.out.println(name + ".." + age);
        }
    }
    
    class Man {
        private String name;
        private String gender;
        private String createTime;
        {
            gender = "m";
            //获取系统时间,并转换成相应格式的字符串,并且给成员变量赋值
            long time = System.currentTimeMillis();//获取当前系统时间作为创建时间
            Date d = new Date(time);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            createTime = sdf.format(d);
        }
    
        public Man() {}
    
        public Man(String name) {
            this.name = name ;
        }
    
        public void show() {
            System.out.println(name + "..." + gender + "..." + createTime);
        }
    }

    静态代码块

    1.格式

      static{

        代码块内容

      }

    2.位置:类中方法外

    3.作用:用于给静态的成员变量赋初始化值

    用于执行那些只需要执行一次的代码,例如驱动加载等等

    4.执行特点:

      1.随着类的加载而执行

      2.类只加载一次,所以静态代码块只执行一次。

      3.执行的时机最早:早于所有的对象相关内容。

    执行顺序:静态代码块->初始化代码块(构造方法代码块)->构造方法

    代码示例:

    class Demo03_静态代码块 {
        
        static {
            System.out.println("测试类的静态代码块执行了");//1
        }
    
        public static void main(String[] args) {
            System.out.println("主方法执行了");//2
            StaticDemo sd1 = new StaticDemo();
            StaticDemo sd2 = new StaticDemo(666);
        }
    }
    
    class StaticDemo {
        static {
            System.out.println("StaticDemo的静态代码块执行了");//3
        }
    
        {
            System.out.println("staticDemo的构造代码块执行了");//4,6
        }
    
        public StaticDemo() {
            System.out.println("StaticDemo的空参构造执行了");//5
        }
    
        public StaticDemo(int i) {
            System.out.println("StaticDemo的有参构造执行了");//7
        }
    }

    继承:

    1.继承的概念:让类与类产生关系,父子类的关系。

    2.关键字:extends 扩展,增加,继承

    3.父类和子类:

    父类:被继承的类,超类(super),基类(base)

    子类:用于继承的类,派生类。

    代码示例:

    class Demo05_有继承的情况 {
        public static void main(String[] args) {
            Cat c = new Cat();
            c.setColor("black");
            c.setAge(3);
            System.out.println(c.getColor() + "..." + c.getAge());
        }
    }
    
    class Animal {
        private String color;
        private int age;
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getAge() {
            return age;
        }
    
        public void sleep() {
            System.out.println("睡觉");
        }
    }
    
    class Cat extends Animal {
    
    }
    
    class Dog extends Animal {
    
    }

    创建对象的顺序:

    创建子类对象时,先创建父类的对象,直到创建到Object类为止。

    由于父类加载到内存中,因此子类可以使用父类的非Private修饰的属性与方法。

    但父类不能使用子类的属性和方法,和访问修饰符无关。

    Object类是所有类的父类(除自身以外)

    重写:@Override  重写的注解

    父类方法不能满足子类的需求,子类中重写父类的方法。

    重写与重载的区别:

    重载:在一个类中,方法名相同,参数列表不同

    重写,至少两个类,方法名相同,参数列表相同

    继承的好处与弊端:

    1.好处:提高了代码的重用性

      提高了代码的可维护性

      是多态的前提

    2.弊端:提高了代码的耦合性(松耦合,解耦合)

    耦合性:事物与事物之间的依赖关系,互相影响的程度。

    3.开发原则:面向对象最终要实现的目的

    高内聚(一个对象可以自己完成各种事情)   低耦合(对于其他代码的依赖性非常低)   代码的复用性高

    继承的注意事项:

    1.私有的成员不能被继承

    父类中有一些私有成员,不能在子类中直接使用。

    其实在子类对象中,任然包含了父类中定义的私有成员变量

    只不过在子类中,不能直接访问父类中定义的私有成员变量。

    2.父类中的构造方法不能继承

    代码示例:

    class Demo06_继承的注意事项 {
        public static void main(String[] args) {
            Student stu = new Student();
        }
    }
    
    class Person {
        private String name;
        private int age;
    
        public Person() {}
    
        public Person(String name, int age) {
            this.name = name;
            this.age =age;
        }
    }
    
    class Student extends Person {
        public void show() {
            //System.out.println(name + "..." + age);
        }
    }

    final关键字:

    1.单词含义:最终的,最后的,不能改变的。

    2.final关键字,可以修饰类,方法,变量。

    3.修饰类:表示一个最终类,表示不能有子类(不能被其他类继承)

    一旦一个类不能被继承,那么其中所有方法都不能被重写

    但是不影响当前类的方法被调用

    修饰一个方法:表示这是一个最终方法,该方法不能被重写

    修饰变量:表示一个最终变量,只能赋值一次。

  • 相关阅读:
    图书管理系统(spring springmvc)
    ssm框架整合(java个人博客系统)
    HTTP笔记
    (数据结构课程设计)稀疏矩阵运算器
    数据库学习笔记
    HTML5 3D旋转图片相册
    Mybatis分页插件-PageHelper的使用
    如何更改github工程的语言属性
    HttpServletResponse和HttpServletRequest详解
    node js 安装.node-gyp/8.9.4 权限 无法访问
  • 原文地址:https://www.cnblogs.com/ywzbky/p/10602888.html
Copyright © 2020-2023  润新知