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

文章目录

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
    评论
### 回答1: 第1《认识java语言》是介绍Java语言的起源、发展以及特点等基本知识。Java是一种跨平台的高级编程语言,被广泛应用于开发Web和移动应用程序等领域。它具有面向对象、可移植、健壮性好等特点。 第2Java语言基础》是介绍Java语言的基本语法、数据类型、运算符、控制流程等内容。学习这些基础知识对于理解和编写Java程序至关重要。 第3《面向对象程序设计之一》是介绍面向对象编程的原理和基本概念。学习面向对象的思想和方法可以提高程序的可扩展性和重用性。本内容包括类与对象、封装、继承、多态等知识点。 第4《面向对象程序设计之二》是进一步探讨面向对象编程高级特性。学习抽象类、接口、内部类等内容可以让我们写出更加灵活和健壮的Java程序。 第5Java基础类库》是介绍Java标准库中的常用类和接口。掌握这些类的使用方法可以大大简化程序开发,如字符串处理、集合框架、IO操作等。 第6《图形用户界面程序》是介绍使用Java编写图形用户界面(GUI)程序的方法。学习Swing和JavaFX等技术可以实现丰富、直观的用户界面。 第7《输入输出流》是介绍Java中的输入输出操作。学习文件读写、网络通信等知识可以实现数据的持久化和交互。 第8《多线程并发编程》是介绍Java多线程编程的原理和方法。学习多线程操作可以充分利用多核处理器的优势,提高程序的并发性和响应性。 第9《网络编程》是介绍使用Java进行网络通信的方法。学习Socket编程、HTTP协议等内容可以开发出基于网络的应用程序。 第10《数据库编程》是介绍使用Java连接和操作数据库的方法。学习JDBC等技术可以实现与数据库的交互,进行数据持久化和查询。 通过学习这些节的内容,可以全面掌握Java语言的基础知识和常用技术,为进一步深入学习和应用Java打下良好的基础。 ### 回答2: 第1:认识Java语言 第1介绍了Java语言的基本概念和特点。Java是一种跨平台的编程语言,被广泛应用于Web开发、移动应用开发等领域。Java具有简单易学的特点,使用了面向对象的编程思想,具有良好的可扩展性和可维护性。 第2Java语言基础 第2主要介绍了Java语言的基本语法和常用的数据类型。包括变量、常量、运算符、流程控制语句等。同还介绍了Java中的数组、字符串和输入输出等相关知识。 第3:面向对象程序设计之一 第3介绍了面向对象程序设计的基本概念和常用的面向对象的特性。包括类、对象、继承、封装和多态等。同还介绍了如何定义和使用类,以及如何实现各种面向对象的特性。 第4:面向对象程序设计之二 第4进一步深入介绍了面向对象程序设计的相关知识。包括接口、抽象类、继承和多态的高级应用,以及异常处理和内部类等。这些知识对于构建复杂的面向对象程序非常重要。 第5Java基础类库 第5介绍了Java基础类库中常用的类和方法。包括字符串、日期、间、集合、文件和输入输出等类库的使用。这些类库为我们提供了丰富的功能,在Java编程中非常实用。 第6:图形用户界面程序 第6介绍了Java图形用户界面编程的相关知识。包括Swing和AWT等GUI库的使用,以及事件处理和布局管理器等。通过学习这些知识,我们可以编写出漂亮、交互性强的图形界面程序。 第7:输入输出流 第7介绍了Java中输入输出流的使用。包括字节流和字符流的概念、File类的使用以及文件读写和网络通信等。这些知识对于实现数据的读写和传输非常重要。 第8:多线程并发编程 第8介绍了Java多线程并发编程的相关知识。包括线程、线程同步和线程通信的概念,以及锁和条件的使用。同还介绍了线程池的概念和使用,以及如何处理并发编程中的常见问题。 第9:网络编程 第9介绍了Java网络编程的基本知识。包括Socket编程、TCP和UDP协议,以及HTTP协议的使用。通过学习这些知识,我们可以编写出具有网络功能的Java应用程序。 第10:数据库编程10介绍了Java数据库编程的相关知识。包括连接数据库、执行SQL语句、事务处理和数据查询等。通过学习这些知识,我们可以使用Java操作各种类型的数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值