面向对象编程(static关键字)

简介: 面向对象编程(static关键字)

关键字:static

当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上 的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象, 其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少 对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个 国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中 都单独分配一个用于代表国家名称的变量。

类属性、类方法的设计思想

  • 类属性作为该类各个对象之间共享的变量。在设计类时,分析哪 些属性不因对象的不同而改变,将这些属性设置为类属性。相应 的方法设置为类方法
  • 如果方法与调用者无关,则这样的方法通常被声明为类方法,由 于不需要创建对象就可以调用类方法,从而简化了方法的调用。
  • 使用范围:
  • 在Java类中,可用static修饰属性、方法、代码块、内部类
  • 被修饰后的成员具备以下特点:
  • 随着类的加载而加载
  • 优先于对象存在
  • 修饰的成员,被所有对象所共享
  • 访问权限允许时,可不创建对象,直接被类调用

类变量(class Variable)

  • 类变量(类属性)由该类的所有实例共享

类变量 vs 实例变量内存解析

静态变量的内存解析

类方法(class method)

  • 没有对象的实例时,可以用类名.方法名()的形式访问由static修饰的类方法
  • 在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
class Person {
private int id;
private static int total = 0;
public static int getTotalPerson() {
//id++; //非法
return total;}
public Person() {
total++;
id = total;
}}
public class PersonTest {
public static void main(String[] args) {
System.out.println("Number of total is " + Person.getTotalPerson());
//没有创建对象也可以访问静态方法
Person p1 = new Person();
System.out.println( "Number of total is "+ Person.getTotalPerson());
}}
The output is:
Number of total is 0
Number of total is 1
  • 因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也 不能有super ? YES!)
  • static修饰的方法不能被重写
class Person {
private int id;
private static int total = 0;
public static void setTotalPerson(int total){
this.total=total; //非法,在static方法中不能有this,也不能有super
}
public Person() {
total++;
id = total;
}}
public class PersonTest {
public static void main(String[] args) {
Person.setTotalPerson(3);
} }


相关文章
|
1月前
|
编译器 C语言 C++
c++类和对象
c++类和对象
30 1
|
2天前
|
C++
C++类和对象1
C++类和对象
15 0
|
1月前
|
编译器
C++-类和对象(3)
C++-类和对象(3)
28 0
|
6月前
|
Java 编译器
类和对象!
类和对象!
33 1
|
6月前
|
Java 编译器
类和对象(一)
类和对象(一)
52 0
|
8月前
|
存储 编译器 Go
C++类和对象【下】【附题】
C++类和对象【下】【附题】
24 0
|
10月前
|
编译器 C++
【类和对象(中)】(一)
【类和对象(中)】(一)
47 0
|
11月前
|
Java 编译器 C++
【C++】类和对象(下)
构造函数初始化列表、类的static成员、友元函数和友元类、内部类、匿名对象、拷贝对象时的一些编译器优化。
|
存储 编译器 C语言
【C++】类和对象(一)
C++对C语言的补充最重要的功能之一就是类和对象的引入,在学习完漫长的C语言,从这里就算是开始踏上了高级语言之路,C++的这门语言有太多细节了,所以也要花费更多的时间和更多的精力,去面对更多的困难,做好心里准备,学校杂七杂八的事情,想要让学习和生活上的保持平衡,并非一件易事,但是又怎么能停下脚步呢?路漫漫其修远兮,吾将上下而求索。加油吧,少年!
【C++】类和对象(一)