概述
非零基础自学Java (老师:韩顺平)
✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】
第10章 面向对象编程(高级部分)
文章目录
- 非零基础自学Java (老师:韩顺平)
- 第10章 面向对象编程(高级部分)
- 10.1 类变量和类方法
- 10.1.1 类变量 - 提出问题
- 10.1.2 传统解决方法
- 10.1.3 类变量快速入门
- 10.1.4 类变量内存布局
- 10.1.5 什么是类变量
- 10.1.6 如何定义类变量
- 10.1.7 如何访问类变量
- 10.1.8 类变量使用注意事项和细节讨论
- 10.1.9 类方法基本介绍
- 10.1.10 类方法的调用
- 10.1.11 类方法举个栗子
- 10.1.12 类方法经典的使用场景
- 10.1.13 类方法使用注意事项和细节讨论
10.1 类变量和类方法
10.1.1 类变量 - 提出问题
有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?,编写程序解决。
10.1.2 传统解决方法
- 在main方法中定义一个变量 count
- 当有一个小孩加入游戏就 count ++ , 最后count就记录着有多少个人在玩
问题:
- count 独立于对象,尴尬
- 访问count,没有使用到面向对象
10.1.3 类变量快速入门
举个栗子
package com.dingjiaxiong.static_;
/**
* ClassName: ChildGame
* date: 2022/9/3 15:14
*
* @author DingJiaxiong
*/
public class ChildGame {
public static void main(String[] args) {
Child child1 = new Child("孙悟空");
child1.join();
child1.count ++;
Child child2 = new Child("猪八戒");
child2.join();
child2.count ++;
Child child3 = new Child("唐僧");
child3.join();
child3.count ++;
Child child4 = new Child("沙悟净");
child4.join();
child4.count ++;
System.out.println("共有" + Child.count + "个小孩加入了游戏");
System.out.println(child1.count);
System.out.println(child2.count);
System.out.println(child3.count);
System.out.println(child4.count);
}
}
class Child{
private String name;
public static int count = 0;
public Child(String name) {
this.name = name;
}
public void join(){
System.out.println(name + "加入了游戏...");
}
}
运行结果
10.1.4 类变量内存布局
【static变量是对象共享】
共识
- static变量是一个类所有对象共享
- static类变量,在类加载的时候就生成了
10.1.5 什么是类变量
类变量也叫静态变量/静态属性,是该类的所有对象共享的变量。
任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。这个从前面的图也可看出来。
10.1.6 如何定义类变量
定义语法
访问修饰符 static 数据类型 变量名;【推荐】
static 访问修饰符 数据类型 变量名;
10.1.7 如何访问类变量
- 类名.类变量名【推荐】
- 对象名.类变量名
静态变量的访问修饰符的访问权限和范围和普通属性是一样的。
举个栗子
package com.dingjiaxiong.static_;
/**
* ClassName: VisitStatic
* date: 2022/9/3 16:01
*
* @author DingJiaxiong
*/
public class VisitStatic {
public static void main(String[] args) {
System.out.println(A.name);
A a = new A();
System.out.println(a.name);
}
}
class A{
public static String name = "韩老师666";
private int num = 10;
}
运行结果
10.1.8 类变量使用注意事项和细节讨论
-
什么时候需要用类变量
当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。
-
类变量与实例变量(普通属性)区别
类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
-
加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
-
类变量可以通过类名.类变量名或者对象名.类变量名来访问,但java设计者推荐使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】
-
实例变量不能通过类名.类变量名方式访问。
-
类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了。
-
类变量的生命周期是随类的加载开始,随着类消亡而销毁。
举个栗子
package com.dingjiaxiong.static_;
/**
* ClassName: StaticDetail
* date: 2022/9/3 16:07
*
* @author DingJiaxiong
*/
public class StaticDetail {
public static void main(String[] args) {
B b = new B();
System.out.println(B.n2);
System.out.println(C.address);
}
}
class B{
public int n1 = 100;
public static int n2 = 200;
}
class C{
public static String address = "北京";
}
运行结果
10.1.9 类方法基本介绍
类方法也叫静态方法。
形式:
访问修饰符 static 数据返回类型 方法名(){} 【推荐】
static 访问修饰符 数据返回类型 方法名(){}
10.1.10 类方法的调用
使用方式【前提是满足访问修饰符的访问权限…】
- 类名.方法名
- 对象名.类方法名
10.1.11 类方法举个栗子
package com.dingjiaxiong.static_;
/**
* ClassName: StaticMethod
* date: 2022/9/3 16:16
*
* @author DingJiaxiong
*/
public class StaticMethod {
public static void main(String[] args) {
Stu tom = new Stu("Tom");
Stu.payFee(100);
Stu marry = new Stu("Marry");
Stu.payFee(200);
Stu.showFee();
System.out.println("9开平方的结果是 = " + Math.sqrt(9));
System.out.println(MyTools.calSum(10 ,30));
}
}
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 类方法经典的使用场景
当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
在程序员实际开发,往往会将一些通用的方法,设计成静态方法,这样不需要创建对象就可以使用了,比如打印一维数组,冒泡排序,完成某个计算任务等。
10.1.13 类方法使用注意事项和细节讨论
- 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区∶
- 类方法中无this的参数
- 普通方法中隐含着this的参数
- 类方法可以通过类名调用,也可以通过对象名调用。
- 普通方法和对象有关,需要通过对象名调用,比如对象名.方法名(参数),不能通过类名调用。
- 类方法中不允许使用和对象有关的关键字,比如this和super。普通方法(成员方法)可以。
- 类方法(静态方法)中只能访问静态变量或静态方法。
- 普通成员方法,既可以访问非静态成员,也可以访问静态成员。
【静态方法,只能访问静态的成员,非静态的方法,可以访问静态成员和非静态成员(必须遵守访问权限)】
最后
以上就是留胡子凉面为你收集整理的非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法的全部内容,希望文章能够帮你解决非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复