静态函数和非静态函数的区别(静态方法和非静态方法)
来源:互联网 发布:mysql insert select 编辑:程序博客网 时间:2024/05/17 05:06
首先,静态函数只有当程序结束的时候才从内存消失,生命周期长。而非静态则是动态加载到内存,不需要的时候就从内存消失。
而调用类中的静态函数,无需创建对象就可以调用了,因为当类初始化的时候,就已经加载了静态函数,所以静态函数要比对象加载的早,对象只有被创建的时候才会在堆内存中创建空间。
另外,静态函数中不能使用非静态变量,静态方法不可以定义this,super关键字(因为静态比对象先加载,而this必须首先加载,所以导致冲突,不能使用);非静态函数可以访问静态变量。
最后呢,说明一下创建对象的加载。
A a = new B();
1:B.class 加载进方法区
2:堆内存开辟空间,实例变量进行默认初始化,显示初始化。
3:内存地址传给变量a,栈和堆建立连接
静态函数和非静态函数的使用Demo
public class PersonDemo { public static void main(String[] args) { // 访问静态成员 // 直接通过类名来调用 String country = Person.country; System.out.println(country); // 通过对象.成员的形式访问 Person p1 = new Person("jack", 20, "男"); p1.country = "US"; p1.speak(); }}class Person { String name; int age; String gender; // static 修饰成员变量 static String country = "CN"; static { System.out.println("这是静态代码块"); } { System.out.println("这是构造代码块"); } Person() { System.out.println("无参数构造"); } Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; System.out.println(" 有参数构造"); } // 非静态方法 void speak() { // 非静态方法可以访问静态成员 System.out.println("国籍:" + country); System.out.println("国籍:" + country + " 姓名:" + name + " 性别:" + gender + " 年龄:" + age + " 哈哈!!!"); // 非静态方法可以调用静态方法。 run(); } // 静态方法 static void run() { // 静态方法只能访问静态成员变量。 System.out.println("国籍:" + country); }}
阅读全文
0 0
- 静态函数和非静态函数的区别(静态方法和非静态方法)
- 静态和非静态方法
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别
- 静态方法和非静态方法的区别
- 静态方法和非静态方法的区别
- 静态方法和非静态方法的区别
- Java中静态方法和非静态方法的区别
- 静态方法和非静态方法的区别是什么
- java中静态方法和非静态方法的区别
- C#中静态方法和非静态方法的区别
- PHP静态方法和非静态方法的区别
- 静态方法和非静态方法的区别
- 静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)
- C#静态方法和非静态方法
- c#静态方法和非静态方法
- 23-静态方法和非静态方法
- linux curses函数库
- 空悬指针和野指针
- PathEffect,使用mPaint.setPathEffect为path路径设置不同的效果
- zeromq+python安装手册
- 模块句柄(实例句柄)和句柄的区别
- 静态函数和非静态函数的区别(静态方法和非静态方法)
- 大数据平台的发展会降低程序员的价值吗?
- POJ 3199 Uncle Jack(高精度加速乘)
- 递归建立二叉树
- 解决textarea默认鼠标不是从左上角开始的问题
- VideoView 无法播放此视频
- Android数据存储之文件File
- 【Android】性能测试之获取Android流量数据
- SpringMVC文件上传