• 访问控制符、代码块、引用传递、包 java (三)


     封装性:

      1、将抽象得到的全部属性和方法相结合在一起,形成一个不可分割的单位——类

      2、隐藏类的实现细节,将对象的属性和实现细节隐藏,不允许外部直接访问,只把接口公开。通过这些接口来访问或者操作隐藏的属性和方法实现。

     访问控制符:

     代码块:

      在java中,使用花括号({ })括起来的代码成为代码块,根据其位置和声明的不同,可分为普通代码块、构造块、静态块和同步代码块。其中同步代码块在购买多线程会讲解。

      普通代码块:

        直接在一个方法或者语句中出现的{}就是普通代码块。——相同类型的代码块执行的顺序为,先定义的代码块先执行,后定义的代码块后执行。

      构造块:

      直接在类中定义的且没有加static关键字的代码块{}为构造块。构造块在创建对象的时候会被调用,每次创建对象都会被调用,且构造块的执行顺序优先于构造函数。

      

    public class CodeBlock{
        {
            System.out.println("第一构造块");
        }
        public CodeBlock(){
            System.out.println("构造方法");
        }
        {
             System.out.println("第二构造块");
        }
        
        public static void main(String[] args){
            new CodeBlock();
            new CodeBlock();
            new CodeBlock();
        }
    }
    View Code

    执行结果如图所示

    第一构造块
    第二构造块
    构造方法
    第一构造块
    第二构造块
    构造方法
    第一构造块
    第二构造块
    构造方法

     静态代码块:

      在java类中使用static关键字声明的代码块称为静态代码块。主要用于初始化类,为类的静态属性初始化。

      特点:

      1、静态代码块不能存于任何方法体内;

      2、静态代码块不能直接访问实例变量和实例方法,需要通过类的实例对象来访问。这与静态方法是一样的。

      3、JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。如果多个则先定义的先执行。每个静态代码块都只执行一次。 

    例子

    class Code{
        {
            System.out.println("Code的构造块");
        }
        static{
            System.out.println("Code的静态代码块");
        }
        public Code(){
            System.out.println("Code的构造方法");
        }
    }
    
    public class CodeBlock01 {
        {
            System.out.println("CodeBlock01的构造块");
        }
        static{
            System.out.println("CodeBlock01的静态代码块");
        }
        public CodeBlock01(){
            System.out.println("CodeBlock01的构造方法");
        }
        public static void main(String[] args) {
            System.out.println("CodeBlock01的主方法");
            new Code();
            new Code();
            new CodeBlock01();
            new CodeBlock01();
        }
    
    }
    View Code

    结果如下

    一些小测试题目:

    普通代码块

    public class ClassTest01{
        public static void main(String args[]){
            int x=5;
            System.out.println(++x);
            {
                int x=7;
                System.out.println(x);
            }
        }
    }
    View Code

    编译会出错,是因为此普通代码块是在main方法内部定义的,在同一个作用域内,一个变量只能定义一次。

    综合使用代码块

    public class ClassTest02{
        static int i;
        static {
            i+=10;
        }
        public ClassTest02(){
            System.out.println("构造方法: "+i);
        }
        {
            System.out.println("构造块: "+i++);
        }
        public static void main(String[] args){
            System.out.println("主方法:"+(ClassTest02.i++));
            new ClassTest02();
        }
        static {
            i/=10;
        }
    }
    程序编译的运行结果是( )
    A. 主方法:2 构造块:2 构造方法:3
    B. 主方法:1 构造块:2 构造方法:3
    C. 主方法:1 构造块:3 构造方法:2
    D. 主方法:10 构造块:11 构造方法:12
    答案见后面
    View Code

    各个代码块的执行顺序:静态代码块》主方法》构造块》构造方法。

    引用传递:

      所有的函数调用本质上都是值的传递。值传递传入的是基本数据类型值的副本;引用传递传入这个引用地址的副本,这个引用地址实际上是一个值。

    上面答案是B       123;

  • 相关阅读:
    过滤器详解
    Servlet-----response.getWriter().write()与out.print()的区别
    电子凭证 : Java 生成 Pdf
    Servlet生命周期与工作原理(转载)
    【转载】(String)、toString、String.valueOf的区别
    开发过程中关于JSON的那些事
    UEditor问题整理
    SUBSTR函数
    SQL中 decode()函数简介
    合并单元格相关问题
  • 原文地址:https://www.cnblogs.com/2589-spark/p/3448477.html
Copyright © 2020-2023  润新知