Java教程

3.2 面向对象编程高级 main方法深入理解 类的五大成员之代码块-跟着韩老师学JavaSE

本文主要是介绍3.2 面向对象编程高级 main方法深入理解 类的五大成员之代码块-跟着韩老师学JavaSE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本!
【零基础 快速学Java】韩顺平 零基础30天学会Java
我整理的学习路线与各章节学习笔记戳这里
硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利!!

具有其他语言基础的盆友只需要把前几章的章节总结简单看一下 然后再去着重看需要学习的章节就可以了!
知识点分的非常清晰! 每章还有总结 这…真的是我理想中的学习资料呐!

学习笔记整理过后放到这里

  • 一方面是让自己再二次记忆一下
  • 一方面是希望可以帮到有这方面知识需要的朋友 给他们一个新的切入点来重新了解这一个知识

本专题包括以下几个主要知识点~
在这里插入图片描述
本次笔记主要记录 main方法的深入理解代码块的内容

文章目录

  • 2.理解main方法语法
    • 【1】main语法说明
    • 【2】main特别说明
    • 【3】main动态传值
  • 3.代码块
    • 【1】代码块快速入门
      • 代码块基本介绍
      • 代码块基本语法
      • 代码块的好处和案例演示
    • 【2】代码块使用细节
      • 1.static代码块作用:对类进行初始化 随着类的加载而执行 且只会执行一次
      • 2.类什么时候被加载(很重要!背下来!)
      • 3.普通的代码块在创建对象实例时会被隐式地调用 创建一次就调用一次 而使用类的静态成员时 普通代码块不会执行
      • 4.创建一个对象时 在一个类中的调用顺序(==重难点!==)
        • first-调用静态代码块和静态属性初始化
        • second-调用普通代码块和普通属性的初始化
        • last-调用构造方法
      • 5.构造器的最前面隐含了super()和调用普通代码块
      • 6.创建子类对象时 子类对象的静态代码块、静态属性初始化、普通代码块、普通属性初始化、构造方法的调用顺序(==面试题==)
      • 7.静态代码块只能直接调用静态成员(静态属性和静态方法)普通代码块可以调用任意成员

2.理解main方法语法

【1】main语法说明

我们经常使用 “psvm” 来快捷打出main方法

那么这个main方法具体是个啥? 来深入理解下——
请添加图片描述

main方法接受的是String类型的数组参数 (数组中保存的是 执行Java命令时传递给所运行的类的参数!)

【2】main特别说明

1.在 main()方法中,我们可以直接调用 main 方法所在类的静态成员

2.但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员

依旧是举个例子

public class Main01 {
	//静态的变量/属性
	private static String name = "韩顺平教育";
	//非静态的变量/属性
	private int n1 = 10000;
	//静态方法
	public static void hi() {
		System.out.println("Main01 的 hi 方法");
	}
	//非静态方法
	public void cry() {
		System.out.println("Main01 的 cry 方法");
	}
	public static void main(String[] args) {
		//可以直接使用 name
		//1. 静态方法 main 可以访问本类的静态成员
		System.out.println("name=" + name);
		hi();
		//2. 静态方法 main 不可以访问本类的非静态成员
		//System.out.println("n1=" + n1);//错误
		//cry();
        
		//3. 静态方法 main 要访问本类的非静态成员,需要先创建对象 , 再调用即可
		Main01 main01 = new Main01();
		System.out.println(main01.n1);//ok
		main01.cry();
	}
}

【3】main动态传值

在IDEA中传递参数的方法——
请添加图片描述
很有意思的一个小技巧 点这里看一下

3.代码块

【1】代码块快速入门

代码块基本介绍

又称为初始化块 属于类中的成员(即 代码块是类的一部分)

代码块类似于方法 将逻辑语句封装在方法体中 通过{}包围起来

但是代码块和方法不同 —— 没有方法名、没有返回、没有参数 只有方法体 同时 代码块不用通过对象或类显示调用 而是加载类时/创建对象时隐式调用

代码块基本语法

那么说了那么多特点 代码块的基本语法是什么呢?
请添加图片描述

{
	...//其实就是这么一段代码
};

代码块的好处和案例演示

请添加图片描述
这里来举个例子看看代码块能干个啥~
请添加图片描述
上面是一端冗余的代码

那么我们就可以使用代码块——
请添加图片描述
测试一下——

public static void main(String[] args) {
        //这里创建对象时 就会先调用代码块中的内容
		Movie movie = new Movie("你好,李焕英");
		System.out.println("===============");
		Movie movie2 = new Movie("唐探 3", 100, "陈思诚");
	}

完整代码如下——

public class CodeBlock01 {
	public static void main(String[] args) {
        //这里创建对象时 就会先调用代码块中的内容
		Movie movie = new Movie("你好,李焕英");
		System.out.println("===============");
		Movie movie2 = new Movie("唐探 3", 100, "陈思诚");
	}

}
class Movie {
	private String name;
	private double price;
	private String director;
	//3 个构造器-》重载
	//老韩解读
	//(1) 下面的三个构造器都有相同的语句
	//(2) 这样代码看起来比较冗余
	//(3) 这时我们可以把相同的语句,放入到一个代码块中,即可
	//(4) 这样当我们不管调用哪个构造器,创建对象,都会先调用代码块的内容
	//(5) 代码块调用的顺序优先于构造器.. 
    {
   		//代码块中的内容
		System.out.println("电影屏幕打开...");
		System.out.println("广告开始...");
		System.out.println("电影正是开始...");
	};
	public Movie(String name) {
		System.out.println("Movie(String name) 被调用...");
		this.name = name;
	}
	public Movie(String name, double price) {
		this.name = name;
		this.price = price;
	}
	public Movie(String name, double price, String director) {
		System.out.println("Movie(String name, double price, String director) 被调用...");
		this.name = name;
		this.price = price;
		this.director = director;
	}
}

【2】代码块使用细节

https://www.bilibili.com/video/BV1fh411y7R8?p=387&spm_id_from=pageDriver

1.static代码块作用:对类进行初始化 随着类的加载而执行 且只会执行一次

static代码块也叫静态代码块 随着类的加载而执行 且只会执行一次

[static]{
    
};

普通代码块 每创建一个对象就执行一次

{

};

2.类什么时候被加载(很重要!背下来!)

  • 创建对象实例时

    A a = new A();

  • 创建子类对象实例 父类也会被加载!

    public class B extends A{} B b = new B();——A类也会被加载

  • 使用类的静态成员时(静态属性,静态方法)

    案例演示

    A类 extends B类的静态块

3.普通的代码块在创建对象实例时会被隐式地调用 创建一次就调用一次 而使用类的静态成员时 普通代码块不会执行

4.创建一个对象时 在一个类中的调用顺序(重难点!

first-调用静态代码块和静态属性初始化

second-调用普通代码块和普通属性的初始化

last-调用构造方法

5.构造器的最前面隐含了super()和调用普通代码块

6.创建子类对象时 子类对象的静态代码块、静态属性初始化、普通代码块、普通属性初始化、构造方法的调用顺序(面试题

请添加图片描述

7.静态代码块只能直接调用静态成员(静态属性和静态方法)普通代码块可以调用任意成员

这里跟静态方法的特点是一样滴~

另外 静态代码块的特点——学习起来比较麻烦 工作就比较轻松!

这篇关于3.2 面向对象编程高级 main方法深入理解 类的五大成员之代码块-跟着韩老师学JavaSE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!