b***i 发帖数: 3043 | 1 private class xxx extends yyy {
private static final long serialVersionUID = 31L;
上面是正确的
private static final int[] myArray = {99,-1};却不对,说不能用static
为什么?如果数组没有static, 能保证xxx的不同对象不用分别分配myArray的内存吗? |
f*******n 发帖数: 12623 | |
b***i 发帖数: 3043 | 3 public class zzz {
private xxx ok=new xxx();
private class xxx {
private static final int[] aa={1,2,3};// this one
【在 f*******n 的大作中提到】 : 没问题。谁说不能用?
|
N***m 发帖数: 4460 | 4 我想是因为每个zzz object有自己不同的class xxx definition,
所以想按照你原来意思那么用的话,可以把xxx声明为static.
【在 b***i 的大作中提到】 : public class zzz { : private xxx ok=new xxx(); : private class xxx { : private static final int[] aa={1,2,3};// this one
|
f*******n 发帖数: 12623 | 5 这个是inner class的问题。inner class的static只可以是constant。
不放在inner class就行了
【在 b***i 的大作中提到】 : public class zzz { : private xxx ok=new xxx(); : private class xxx { : private static final int[] aa={1,2,3};// this one
|
B*****g 发帖数: 34098 | 6 what is constant in Java?
【在 f*******n 的大作中提到】 : 这个是inner class的问题。inner class的static只可以是constant。 : 不放在inner class就行了
|
f*******n 发帖数: 12623 | 7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls
Inner classes may not declare static members, unless they are constant
variables (§4.12.4), or a compile-time error occurs.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls
A variable of primitive type or type String, that is final and initialized
with a compile-time constant expression (§15.28), is called a constant
variable. |
b***i 发帖数: 3043 | 8 就是想吧,每次initialize xxx的对象,不想生成那么多数组,因为就是常数,不会改
变。而且就在private class里面用,要把数组放进xxx里面非常合理。但是,xxx里面
确实要对外面的class对象进行操作,所以不能整个class都static.
挪数组到外面也可以。
有没有可能本来private class里面的final int[]就不会有多个copy?
【在 N***m 的大作中提到】 : 我想是因为每个zzz object有自己不同的class xxx definition, : 所以想按照你原来意思那么用的话,可以把xxx声明为static.
|
N***m 发帖数: 4460 | 9
这句话什么意思?你难道不能new 两个xxx对象?
【在 b***i 的大作中提到】 : 就是想吧,每次initialize xxx的对象,不想生成那么多数组,因为就是常数,不会改 : 变。而且就在private class里面用,要把数组放进xxx里面非常合理。但是,xxx里面 : 确实要对外面的class对象进行操作,所以不能整个class都static. : 挪数组到外面也可以。 : 有没有可能本来private class里面的final int[]就不会有多个copy?
|
B*****g 发帖数: 34098 | 10 顶
【在 f*******n 的大作中提到】 : http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls : Inner classes may not declare static members, unless they are constant : variables (§4.12.4), or a compile-time error occurs. : http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls : A variable of primitive type or type String, that is final and initialized : with a compile-time constant expression (§15.28), is called a constant : variable.
|
m*****j 发帖数: 499 | 11 赞~
【在 f*******n 的大作中提到】 : http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls : Inner classes may not declare static members, unless they are constant : variables (§4.12.4), or a compile-time error occurs. : http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls : A variable of primitive type or type String, that is final and initialized : with a compile-time constant expression (§15.28), is called a constant : variable.
|
b***i 发帖数: 3043 | 12 就是说,内部的private class xxx 里面要对外面的class的非static变量进行操作,
所以不能把xxx设static。
只能把这些本来就是常数的数组拿到外围。
【在 N***m 的大作中提到】 : : 这句话什么意思?你难道不能new 两个xxx对象?
|
N***m 发帖数: 4460 | 13 我不明白你说的和static class有什么关系?
不知道我理解得的确不确切:)
比如
public class B {
public int k;
}
public class Main {
B b1 = new B();
B b2 = new B();
xxx x = new xxx(this.b1, 1);
xxx y = new xxx(this.b2, 2);
public static void main(final String[] args) {
final Main m = new Main();
System.out.println(m.b1.k);
System.out.println(m.b2.k);
}
private static class xxx {
private static final int[] aa = { 1, 2, 3 };// this one
public xxx(final B b, final int j) {
b.k = xxx.aa[j];
}
}
}
最后一个方法可以对传进来的B对象(非static)进行操作阿。。
【在 b***i 的大作中提到】 : 就是说,内部的private class xxx 里面要对外面的class的非static变量进行操作, : 所以不能把xxx设static。 : 只能把这些本来就是常数的数组拿到外围。
|