为什么字段A
可以是非静态的。但是,当我从字段static
,B
或C
中删除D
时,出现编译错误。
这是来自一个资源的猜测,我想了解为什么我可以在没有A
的情况下进行字段static
。
public class Solution
{
public int A = 5;
public static int B = 5;
public static int C = 5;
public static int D = 5;
public static void main(String[] args)
{
Solution solution = new Solution();
solution.A = 5;
solution.B = 5 * B;
solution.C = 5 * C * D;
Solution.D = 5 * D * C;
Solution.D = 5;
}
public int getA()
{
return A;
}
}
答案 0 :(得分:0)
在Java中,一个类可以有两种类成员:
实例成员:实例成员属于该类的实例(对象)。例如代码中的变量function get(rec, binName, from, to)
if aerospike:exists(rec) then
local l = rec[binName]
if (l == nil) then
return list()--return empty array
else
--first index in lua is 1
local length = list.size(l)
local pagination = list()
if (length < from) then
return list()
elseif (length >= from and length <=to) then
for i=from,length,1 do
list.append(pagination, l[i])
end--end for
return pagination
else
for i=from,to,1 do
list.append(pagination, l[i])
end--end for
return pagination
end
end
else
return list();--end return empty array
end--end else aerospike exists
end
--end function
。实例变量为类的每个对象分别具有单独的副本(分配内存)。可以在A
上下文中直接访问实例成员,并且需要在non-static
上下文中访问实例(对象)。
静态成员:static
成员属于该类。一个类只存在每个变量的一个副本。可以在任何地方直接在班级中访问static
个成员。例如代码中的变量static
,B
和C
。
D
请参阅此代码块,因为Solution solution = new Solution();
solution.A = 5; //
solution.B = 5 * B;
solution.C = 5 * C * D;
Solution.D = 5 * D * C;
Solution.D = 5;
是类的实例成员,因此您使用类A
的实例访问它。所有其他人都是班级的solution
成员。 static
成员属于该类,可以在static
上下文中直接访问。 static
是一种main()
方法。
当您从其他变量static
中删除static
时,您需要使用该类的实例访问它们,因为它们成为该类的实例成员并需要一个对象引用来访问它们
另请注意,可以使用类的实例访问(B, C, D)
个成员。例如,使用static
,这里solution.C
是C
成员,但可以使用类的实例访问。同样适用于static
和B
。
答案 1 :(得分:0)
我会试着说清楚。静态意味着可以使用此方法或变量,而无需具有该类的对象
没有静态:
Solution solution = new Solution();
solution.A = 5;
with static:
**S**olution.B = 5 * B;
**S**olution.C = 5 * C * D;
Solution.D = 5 * D * C;
请注意,如果你用解决方案(大S)调用它,则引用类,而解决方案(小s)是类的对象
因为使用B,C,D而没有“解决方案”,所以假定你的意思是将其称为静态(就像Solution.B)
您的代码“已更正”:
public class Solution
{
public int A = 5;
public int B = 5;
public int C = 5;
public int D = 5;
public static void main(String[] args)
{
Solution solution = new Solution();
solution.A = 5;
solution.B = 5 * solution.B;
solution.C = 5 * solution.C * solution.D;
solution.D = 5 * solution.D * solution.C;
Solution.D = 5;
}
}
答案 2 :(得分:0)
使用代码:
Solution solution = new Solution();
您正在创建类Solution的对象。因此,您有一个实例和
solution.A
不是静态访问(也不是其他字段访问)。这段代码应该生成一个警告,告诉你这个(至少是Eclipse&amp; IDEA)。