java-入门 static静态类型(自学笔记)(郝斌)
关键字static
- 静态成员属于类本身的,而不是属于对象,被类的所有对象所共有
- 即使不创建对象,也可以使用类本身的静态成员
- 静态成员分为
- 静态数据成员
- 静态方法成员
- 使用静态成员的两种方法
- 类名.静态成员名
- 类对象名.静态成员名
- 编写使用静态变量统计一个类产生的实例对象的个数的程序
//程序证明static属性i属于类本身,创建对象的时候不再单独创建数据成员i的内存
class A
{public static int i = 10;public void show(){System.out.printf("%d\n",i);}
}
class Teststatic_1
{public static void main(String[] args){A aa1 = new A();A aa2 = new A();A aa3 = new A();aa1.i = 20;aa2.show();System.out.printf("%d\n",aa3.i);}
}程序运行示例:
——————————————————————————————
20
20
——————————————————————————————
//static属性i是属于类本身,或者讲:没有对象,我们仍然可以直接通过类名的方式访问该类内部的static属性//static方法 同理
class A{public static int i = 10;public static void f(){System.out.printf("%d\n",A.i);}}
class Teststatic_2
{public static void main(String[] args){System.out.printf("%d\n",A.i);A.f();}
}
程序运行示例:
——————————————————————————————
10
10
——————————————————————————————
//static属性和方法虽然属于类本身,虽然可以通过类名的方式访问
//但是static属性和方法很明显也属于类对象,当然也可以类对象名的方式进行访问
class A{public static int i = 10;public static void f(){System.out.printf("%d\n",A.i);}}
class Teststatic_3
{public static void main(String[] args){// System.out.printf("%d\n",A.i);// A.f();A aa = new A();aa.f();System.out.printf("%d\n",aa.i);}
}程序运行示例:
——————————————————————————————
10
10
——————————————————————————————
//只有非private的static成员才可以通过类名的方式访问
//static只是表明了该成员具有了可以通过类名访问的潜在特征
//但是否可以通过类名访问,还必须满足一个条件,该成员必须是非private
class A{public static int i = 10;private static void f(){System.out.printf("%d\n",A.i);}}
class Teststatic_4
{public static void main(String[] args){// System.out.printf("%d\n",A.i); OKA.f();// A aa = new A(); // aa.f(); OK// System.out.printf("%d\n",aa.i); OK}
}程序运行示例:
——————————————————————————————
Teststatic_4.java:18: 错误: f() 在 A 中是 private 访问控制A.f();^
1 个错误
______________________________
//说明静态方法不能访问非静态成员
//说明非静态方法可以访问静态成员
class A{private static int i = 10;public int j = 99;public static void f(){//g(); //error 静态方法不能访问非静态成员// j = 22; //error 静态方法不能访问非静态成员System.out.printf("FFFF\n");}public void g(){f(); //OK 说明非静态方法可以访问静态成员System.out.printf("GGGG\n");System.out.printf("%d\n",i);}}
class Teststatic_5
{public static void main(String[] args){A aa = new A(); aa.g(); // System.out.printf("%d\n",aa.i); OK}
}程序运行示例:
——————————————————————————————
FFFF
GGGG
10
______________________________
class A
{public int i;private static int cnt = 0;public A(){cnt++;}public A(int i){this.i = i;cnt++; //this.cnt -->error 静态属于类,故没有this指针}public static int getCnt(){return cnt;}}class M
{public static void main(String[] args){A aa1 = new A();A aa2 = new A();System.out.printf("%d\n",A.getCnt());}
}程序运行示例:
——————————————————————————————
2
______________________________
在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象
静态方法不能以任何方式应用this和super关键字(super关键字在下一章讲解)。与上面的道理一样,因为静态方法在引用的对象根本就没有产生。
静态方法只能访问类的静态成员。
但非静态方法却可以访问类中所有成员,包括静态成员
java-入门 static静态类型(自学笔记)(郝斌)相关推荐
- Java入门学习笔记——郝斌(一)概述及面向对象
Java入门学习笔记--郝斌 1.Java概述 java的起源和发展 java的特点 java的应用领域 java学习目标 环境变量的设置 为什么要设置path? path的设置 有关classpat ...
- 《Python+Kivy(App开发)从入门到实践》自学笔记:打包——Windwos打包
章节目录及知识点总览 6.1 Windows打包 将python程序编译成可以在windows上运行的.exe程序. 操作过程中踩过的坑: 1.书上使用的测试文件没找到(使用画板程序测试) 2.通过6 ...
- Java之static静态对象
static关键字: 1.概念: 被该类的所有对象共享使用,不依赖于某个具体的对象,和对象无关,依赖于类,在内存中唯一只有一份 2.类的加载过程 ...
- java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: ? 这里先猜下控制台输出结果是什么? OK, 或许你已经猜到下面了结果了,那么你还是熟悉Java的. 复制代码 代码如下: 0 1 ...
- Python极简讲义一本书入门机器学习和数据分析--自学笔记
0 前言 本书有的知识点之前说,过了几节后再解释.有几个错误但是影响不大.作者自己找补说,有的没讲正常,主要靠自学. 我这里对一些没讲的作了一些补充. 这里是这本书和源码的百度链接,分享给大家. 链接 ...
- C# 从入门到入土(自学笔记)--Day3
目录 学习目标: 学习内容: 学习时间: 学习产出: C#枚举 C#结构体 C#类 构造函数: 类的静态(static)成员: C#继承 C#多态 静态多态性: 动态多态性: 总结: 学习目标: 新学 ...
- Java import static静态导入
在 JDK 1.5 之后增加了一种静态导入的语法,用于导入指定类的某个静态成员变量.方法或全部的静态成员变量.方法.如果一个类中的方法全部是使用 static 声明的静态方法,则在导入时就可以直接使用 ...
- 会php学java入门要多久_php自学需要多久
PHP专业是比较热门的一门学科,不少人看到这个机会想要学习PHP,那么,对于想进入这一行的同学们来说,自学需要多长时间呢? PHP自学要多久 自学PHP需要看学生自身的领悟能力,PHP,通用开源脚本语 ...
- 菜鸟学JAVA之——static静态代码块
静态代码块 static可以修饰属性.方法.内部类.代码块 静态代码块在类加载时就调用, 而且只执行一次, 并且优先于各种代码块以及构造函数. 有一个地方的静态代码被使用,那么所有的静态代码块都会被调 ...
最新文章
- 第三周-第08章节-Python3.5-文件修改详解
- Did you forget add @script or @script_method annotation? If this is a nn.ModuleList, add it to __con
- 题目梳理(一)(2019.07.06~2019.07.20)
- visual studio 2019 未能在命名空间“System.IO.Ports”中找到类型名“SerialPort”
- finalize方法_final,finally,finalize三者的含义和区别
- laravel插入数据时报 502 Bad Gateway
- 动画:二叉树有几种存储方式?(上)
- cadence软件选择网络功能
- uniapp 微信小程序授权获取手机并绑定登录
- STM32 HAL库 CUBEMX FPU 和 DSP库
- OS模块--批量修改文件名字(二)
- 华为电脑分类四个系列_华为笔记本系列推荐榜单
- BackLinks-卖链接赚钱,只要你的网站达到pr3就很好赚钱
- 英语阅读进化 晾粥进化
- storm笔记:Trident应用
- Android am和pm命令
- 你必须知道的.NET(第2版)
- ajax异步获取数据后动态向表格中添加数据的页面
- 「自然语言处理(NLP)」神经机器翻译(NMT)论文整理(一)
- RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现