本人初学JAVA对static的用法很迷糊,以下有三个程序,大家帮我分析一下,谢谢!
public class mm
{
public static void main(String args[])
{
star();}
public static void star()
{
System.out.print("i love you");
}
}
//书上说:在star()method之前要加上static关键字,是因为main()本身也声明成static,而static method内只能访问到static成员的原因,故要把star()声明成static才行! 可是下面的程序的方法中为什么没有声明成static???class mm
{ int num;
void set_num(int n) //为什么此处的方法不用声明成static也可以被g1.set_num(5)访问???
{
num=n;
System.out.println("num="+num);
}
}
public class gg
{ public static void main(String args[])
{
gg g1=new gg();
g1.set_num(5);//g1.set_num(5);为什么可以访问非static的void set_num(int n)??
}
}
而下面的内部类,却又要声明成static才能访问???public class mm
{
public static void main(String args[])
{ gg g1=new gg();
g1.set_num(5);
}
static class gg //这个所谓的内部类,此处为什么要声明成static???
{
int num;
void set_num(int n){
num=n;
System.out.println("num="+num);
}
}
请各位大哥大姐帮忙,烦恼好多天了,谢谢谢谢!
public class mm
{
public static void main(String args[])
{
star();}
public static void star()
{
System.out.print("i love you");
}
}
//书上说:在star()method之前要加上static关键字,是因为main()本身也声明成static,而static method内只能访问到static成员的原因,故要把star()声明成static才行! 可是下面的程序的方法中为什么没有声明成static???class mm
{ int num;
void set_num(int n) //为什么此处的方法不用声明成static也可以被g1.set_num(5)访问???
{
num=n;
System.out.println("num="+num);
}
}
public class gg
{ public static void main(String args[])
{
gg g1=new gg();
g1.set_num(5);//g1.set_num(5);为什么可以访问非static的void set_num(int n)??
}
}
而下面的内部类,却又要声明成static才能访问???public class mm
{
public static void main(String args[])
{ gg g1=new gg();
g1.set_num(5);
}
static class gg //这个所谓的内部类,此处为什么要声明成static???
{
int num;
void set_num(int n){
num=n;
System.out.println("num="+num);
}
}
请各位大哥大姐帮忙,烦恼好多天了,谢谢谢谢!
1. You should First Initialize OUter class ,then Inner class(Do not include static).2.Static inner class is just the member of outter Class ,You should not Initialize Outter Class,still can use. 3.Plz remember give Score to
{
private int a=1;
private static int b=2; public static void star()// MUST STATIC
{
System.out.print("i love you");
} public static void main(String args[])//STATIC
{ star();
// System.out.print("a="+a);//ERROR: NOT STATIC MENBER
System.out.print("b="+b);//STATIC MENBER
}
}
public static void main(String args[]){
staticFun();
new T().nonstaticFun();
new staticclass();
new nonstaticclass();
}
public static void staticFun(){}
public void nonstaticFun(); static class staticclass{}
}class nostaticclass{}
{ int num;
void set_num(int n) //涓轰粈涔堟澶勭殑鏂规硶涓嶇敤澹版槑鎴恠tatic涔熷彲浠ヨg1.set_num(5)璁块棶???
{
num=n;
System.out.println("num="+num);
}
}
public class gg
{ public static void main(String args[])
{
mm m1=new mm();
m1.set_num(5);
//error
//gg g1=new gg();
//g1.set_num(5);//g1.set_num(5);涓轰粈涔堝彲浠ヨ闂潪static鐨剉oid set_num(int n)??
}
}
// A poor mm.
因为 g1是gg的一个实例(对象) 一个对象既可以访问静态成员也可以访问动态成员,所以这个地方非static的void set_num(int n)可以被g1调用。第二、 static class gg //这个所谓的内部类,此处为什么要声明成static???
之所以要声明成静态内嵌类,是因为你在static main()里使用了 直接创建gg实例(对象)的方式了, 如果你以下面的方式创建gg的对象的话,就不用声明为静态内嵌类:
mm m= new mm();
mm.gg g1 = m.new gg(); 以这种方式创建g1的话,内嵌类就不用声明为static了,第三、给你讲述一下静态内嵌类和动态内嵌类
内嵌类,实际上也是作为外围类的“成员”来看待的。不使用static修饰的内嵌类是动态内嵌类,其定义内部可以访问外围类的任何成员,并可通过“外围类.this”的格式来代表外部类的当前对象,其对象必须依附外围类的一个对象才能创建,即动态内嵌类的对象必须绑定于一个外围类的对象。
假设A为外围类,B为其内部的动态内嵌类,要从A的外部(包括静态方法,静态初始化语句)创建内嵌类的对象需要经过这样的步骤:
A a = new A(); //创建外围类的对象
A.B b = a.new B();//在外围类的对象a上创建其内部内嵌类B的对象,其引用赋给变量b
一个静态内嵌类,则可以直接使用“new 类型(参数)”的通用格式来创建,例如:
A.B b = new A.B();
可以直接用类名调用没有 static 的,要先 new 出对象,用 对象 才可以调用本人刚刚学,可以一起讨论