第10章 面向对象编程(高级部分)

本文详细探讨了Java中的面向对象编程高级概念,包括类变量和类方法的定义、访问及应用场景,深入讲解了main方法的语法,探讨了代码块、单例设计模式和final关键字的用法,同时还涵盖了抽象类、模板设计模式和接口的使用细节。通过这些内容,读者将更好地理解和运用Java的面向对象特性。
摘要由CSDN通过智能技术生成

文章目录

10.1 类变量和类方法

10.1.1 问题

一群小孩在玩堆雪人,不时有新的小孩加入,问:现在有多少人在玩?

10.1.2 传统方法

在main方法中定义一个变量count,每有一个小孩加入,count++
问题:
1. count是一个独立于对象的
2. 后续访问count很麻烦,没有使用到OOP
3. 引出 类变量/静态变量

10.1.3 类变量快速入门

public class ChildGame {
   
	public static void main(String[] args) {
   
		Child child1 = new Child("jack");
		child1.join();
		child1.count++;
		
		Child child2 = new Child("tom");
		child2.join();
		child2.count++;

		System.out.println("共有 " + Child.count + " 个小孩加入了游戏");

	}
}

class Child {
   
	private String name;
	public static int count = 0;//类变量(静态变量),可以被Child类所有的对象实例共享
	
	public Child(String name) {
   
		this.name = name;
	}
	
	public void join() {
   
		System.out.println(name + " 加入了游戏");
	}
}

10.1.4 类变量内存布局

有的说在堆,有的说在方法区,和jdk版本有关。
但是不管在哪里,static变量时同一个类所有对象共享的;在类加载的时候就生成了

10.1.5 什么是类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个类的对象去访问它时, 取到的都是相同的值,统一任何一个该类的对象去修改它时,修改的也是同一个变量。

10.1.6 定义类变量

访问修饰符 static 数据类型 变量名;(推荐)
static 访问修饰符 数据类型 变量名;

10.1.7 如何访问类变量

类名.类变量名(推荐)
对象名.类变量名
静态变量的访问修饰符的访问权限和范围 和 普通属性一样

10.1.8 类变量使用注意事项和细节

  1. 什么时候需要类变量
    当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量
  2. 类变量 与 实例变量(普通属性)区别
    类变量是共享的,实例变量是每个对象独享的
  3. static修饰,类名.类变量名 访问(实例变量不能通过该方法访问)
  4. 类变量是在类加载的时候就初始化了,即使没有创建对象,只有类加载了,就可以使用类变量
  5. 类变量的生命周期随类的加载开始,消亡销毁

10.1.9 类方法基本介绍

访问修饰符 static 数据返回类型 方法名(){ } 推荐
static 访问修饰符 数据返回类型 方法名(){ }

10.1.10 类方法的调用

类名.类方法名 推荐
对象名.类方法名

10.1.11 类方法应用案例

public class StaticMethod {
   
	public static void main(String[] args) {
   
		Stu tom = new Stu("tom");
		Stu.payFee(100);//等价 tom.payFee(100);

		Stu.jack = new Stu("jack");
		Stu.pauFee(100);

		Stu.showFee();//200

		//若不希望创建实例,也可以调用方法,则做成静态方法即可,用于工具类,方便调用
		System.out.println(MyTools.calSum(2.3, 4,5));
		
	}
}

class MyTools {
   
	public static double calSum(double n1, double n2) {
   
		return n1 + n2;
	}
}

class Stu {
   
	private String name;
	private static double fee = 0;
	
	public Stu(String name) {
   
		this.name = name;
	}
	
	public static void payFee(double fee) {
   
		Stu.fee += fee;
	}

	public static void showFee() {
   
		System.out.println("学费有: " + Stu.fee);
	}
}

10.1.12 类方法经典使用场景

当方法中不实际到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
如:工具类中的方法 utils (Math类、Arrays类、Collection集合类)

10.1.13 类方法使用注意事项和细节讨论

  1. 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区:
    类方法中无this的参数;普通方法中隐含着this的参数
  2. 类方法可以通过类名或对象名调用
  3. 普通方法和对象有关,需要通过对象名调用,不能通过类名调用
  4. 类方法中不允许使用和对象有关的关键字,如this、super
  5. 类方法(静态方法)中只能访问静态变量 或 静态方法
  6. 普通成员方法,既可以访问 非静态成员,也可以访问 静态成员

10.2 理解main方法语法

10.2.1 main方法

public static void main(String[] args) {}

  1. main方法时虚拟机调用
  2. Java虚拟机需要调用类的main方法,所以该方法访问权限必须public
  3. Java虚拟机在执行main方法时不必创建对象,所以该方法是static
  4. 该方法接收String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数
    Java执行的程序

10.2.2 特别提示

  1. 在main方法中,我们可以直接调用main方法所在类的静态方法或静态属性
  2. 但是不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员
public class Main01 {
   
	private int n1 = 10;
	private void t1(){
   }
	public static void main(String[] args) {
   
		Main01 main01 = new Main01();
		main01.t1();
		System.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值