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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

wzh0210

中级黑马

  • 黑马币:0

  • 帖子:12

  • 精华:0

新手求详解

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

正序浏览
可以但修饰的是  内部类。起到与外部类关联的作用 。
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-18 20:16:03
9#
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
static关键字用法:用于修饰成员变量(成员变量和成员函数),只修饰成员,不修饰局部。
一般情况下static是不修饰类的,但是有一种例外:static可以修饰成员位置上的内部类,不能是方法中的内部类。
static修饰后的变量放在方法区,或者称为共享区或称为数据区。
明确一点:静态是先存在,对象是后存在。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
类可以用static修饰,前提他是内部类。黑马教学视频上有说过,看视频不认真。
回复 使用道具 举报
static是静态修饰关键字,可以修饰变量和程序块以及类方法:当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存;修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。
用法:1.static修饰成员函数:该成员函数不能使用this对象
      static不能修饰构造函数
      static不能修饰函数参数
      static不能修饰局部成员变量
      2.static修饰成员字段
      当类被虚拟机加载时,首先按照字段声明的先后顺序对static成员字段进行初始化
      3.static修饰语句块
      当类被虚拟机加载时,按照声明顺序先后初始化static成员字段和static语句块
      static所修饰的方法和字段是只属于类,所有对象共享。
      在static所修饰的函数和语句块中不能使用非static成员字段。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
自己试了下,可以将一个类声明为static类,还没学到楼上的内外部类,不清楚,查了下百度,以下:
static类中只能包含static成员(使用该类创建的所有成员将共享这些成员的同一个副本)。
静态类纯粹作为工具方法和字段的一个容器来使用。static类中不能包含任何实例数据或方法。
另外,使用new操作符来创建static类的一个对象是没有意义的。如果坚持要这样做,编译器会报错。
如果需要执行任何初始化,那么static类可以包含一个默认的构造函数,前提是该构造函数也被声明为static。
其他任何类型的构造函数都是非法的,编译器会报错。
举个例子:
  1. namespace ConsoleApplication4
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             //Class1 aa = new Class1();//会出错,显示无法声明静态类型Class1的变量
  8.             
  9.         }
  10.     }

  11.     static class Class1
  12.     {
  13.         //int a;  //出错,不能在静态类中声明实例成员
  14.         static int b;
  15.         static void Test()
  16.         {
  17.         }
  18.     }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。
回复 使用道具 举报
static是相对于类中的成员而存在的,不能修饰类.但如果是在类的成员位置上的内部类,static可以修饰,此时要调用内部类方法不需要创建外部类对象.

  1. class Outer
  2. {       
  3.         static class Inner//内部类
  4.         {
  5.        
  6.         void method(){}
  7.        
  8. }
  9. }
  10. class  InnerClassDemo
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 new Outer.Inner().method();  //创建了一个Inner对象,并调用了其中第method方法
  15.                                              //如果Inner不是静态的此处应为new Outer().new Inner().method
  16.                
  17.         }

  18.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
static修饰的类只能是内部类,并且不能是方法中的内部类。
除了保留类的特性外,其访问方式相当于静态方法,
所以不需要实例化外部类,可以直接实例化内部类。
举个实例吧:
public class Outer
{  
        private static class Inner
        {   
                public Inner()
                {
                        System.out.println("Inner");  
                }   
                public static void main(String[] args)
                {           
                                new Outer.Inner();  
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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