A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqian 中级黑马   /  2012-4-26 11:03  /  2798 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态成员函数可以直接访问该类的静态数据和函数成员,那么对于该类中的非静态数据成员应该如何访问?
在函数内部声明的static变量,有什么作用呢?

11 个回复

倒序浏览
类中的非静态数据成员只有通过实例来访问吧
static是成员修饰符,是不可以在函数内部修饰局部变量的
回复 使用道具 举报
1.类的静态成员是属于类的而不是属于哪一个对象的
2.静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的
3.静态成员函数与普通成员函数的差别就在于缺少this指针

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
回答你一个问题 希望对你有帮助   static 的两大作用:

  一、控制存储方式:

  static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。

  1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?

  最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。

  2、 解决方案:因此c++ 中引入了static,用它来修饰变量,它能够指示编译器将此变量在程序的静态存储区分配空间保存,这样即实现了目的,又使得此变量的存取范围不变。

  二、控制可见性与连接类型 :

  static还有一个作用,它会把变量的可见范围限制在编译单元中,使它成为一个内部连接,这时,它的反义词为”extern”.

  static作用分析总结:static总是使得变量或对象的存储形式变成静态存储,连接方式变成内部连接,对于局部变量(已经是内部连接了),它仅改变其存储方式;对于全局变量(已经是静态存储了),它仅改变其连接类型。
回复 使用道具 举报
static的变量属于类本身 所有的实例的调用的静态变量的值都是一样的~你在1个类里改变了一个静态变量的值的话所有的实例在调用这个值的时候就全都发生了变化.
对于类来说 成员变量的价值就是储存每个类单独的信息 比如你有一个学生类 每个学生的岁数就是一个成员变量 这个值每个实例都应该是不一样的 这个时候就绝对不能用静态的变量
静态的变量一般可以用来统计一共创造了多少个实例.....或者干脆你这个类全部都是静态的方法 那就只能用静态的变量

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
static方法内部要访问非静态成员,必须在方法内实例化类,得到相应的对象才能继续访问。
第二个,函数内部的变量不能用static修饰符
回复 使用道具 举报
毕博 发表于 2012-4-26 12:11
回答你一个问题 希望对你有帮助   static 的两大作用:

  一、控制存储方式:

你这引用的是C++中对static的描述啊?
回复 使用道具 举报
类中的非静态数据成员应该如何访问?
类中的非静态成员必须在创建对象以后访问。
函数内部的变量属于局部变量,修饰符只可以使用final
回复 使用道具 举报
陈忠 中级黑马 2012-4-26 13:11:00
9#
static 表示为“静态”的意思,可以用来修饰成员变量和成员方法,也可以形成静态的代码块。
用static修饰的成员变量和成员方法独立于该类的任何对象。看可以实现类所有实例间共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

那么作用就比较明显了即:
   当你想定义一个类成员,使它的使用完全独立于该类的任何实例时,就可以用static修饰。
  
    你可以在网上找些这方面的资料,有的蛮详细的。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
楼主想问类中的static的作用,static ,静态,既可以定义静态成员,也可以定义静态方法,
其作用就是将对象的共有属性和方法通过static表示,表现在内存中,他们不会出现在堆内存中,会在方法区,
可以大大的节省内存
回复 使用道具 举报
谢谢大家
回复 使用道具 举报
希望你能在里面找到你需要的:
static特点:
* 1.随着类的加载而加载。
*          也就是说,静态类会随着类的消失而消失。说明它的生命周期最长。
* 2.优先于对象存在。
*    明确一点:静态是先存在,对象是后存在的。
* 3.被所有对象所共享。
* 4.可以直接被类名所调用。
*
* 实例变量和类变量的区别:
* 1.存放位置。
*   类变量随着类的加载而存在于方法区中。
*   实例变量随着对象的建立而存在于堆内存中。
* 2.生命周期。
*   类变量生命周期最长,随着类的消失而消失。
*   实例变量生命周期随着对象的消失而消失。
*   
*  静态使用注意事项:
*   1.静态方法只能访问静态成员。
*     非静态方法既可以访问静态也可以访问非静态。
*     静态只能覆盖静态。
*   2.静态方法中不可以定义this,super关键字。
*     因为静态优先于对象存在。所以静态方法中不可以出现this。
*   3.主函数是静态的
加点代码吧,你可以去测试代码:class Person{
static String name ;//成员变量,实例变量
  static String country = "CN";//静态的成员变量,类变量。
public static void show(){
  System.out.println(name+":::::"+country);    //可以尝试着把name和country改成非静态的来理解静态。
//  this.haha();      //不可以用this
}
public void haha(){
  System.out.println("jajajja");
}
}
public class StaticDemo {
public static void main(String[] args) {
  Person p = new Person();
p.name = "zhangsan";
p.show();
System.out.println();
System.out.println(Person.country);
  Person.name = "haha";
  Person.show();
}
}

评分

参与人数 1黑马币 +10 收起 理由
职业规划-刘倩老师 + 10 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马