当我尝试设置静态属性时,我收到了堆栈溢出异常.
public static class StaticTest
{
static string stringToSet
{
get
{
return stringToSet;
}
set
{
stringToSet = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在其他课程中:
public void setStaticProperty()
{
StaticTest.stringToSet = "Hello World"; // StackOverflow exception here
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我有一个班级员工
import javax.swing.*;
public abstract class Employee {
public static void searchEmp(int id) {
JOptionPane.showMessageDialog(null, "done");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有另一个班级考试:
public class `test` {
public static void main(String args[]) {
searchEmp(2);// here my programme give error
}
}
Run Code Online (Sandbox Code Playgroud)
我想searchEmp()从类测试中调用哪个是Employee的一部分,但是它给出了一个错误.请建议没有继承的任何解决方案.
我知道为什么这是C++中的错误.
class A
{
A b;
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
因为type of b is unresolved at the compile time.那么为什么下面的代码是正确的?
class A
{
static A b;
}
int main() {}
Run Code Online (Sandbox Code Playgroud)
如果它是静态的,变量b的类型是否已被解析?
最后,令我惊讶的是以下代码适用于JAVA:
public class Main
{
Main g;
public static void main(String[] args)
{
System.out.println("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我知道它们特定于类而不是实例的静态变量.但这并没有给出上述问题的答案......请给我一些启示.
我必须使用一个定义这样的枚举的库:
public static enum LibVal {
VAL_1,
VAL_2,
VAL_3;
}
Run Code Online (Sandbox Code Playgroud)
我把这个枚举作为一个方法参数:
public void libCallback(LibVal val){
//.... some implementation
}
Run Code Online (Sandbox Code Playgroud)
为什么Java的禁止使用的switch与LibVal内部枚举libCallback的方法?但是,如果lib已将其枚举声明为非静态,则可以使用.这是一个令人困惑的,因为这个SO答案说明,确实没有区别......
编辑:
正如bobkilla所述:我在我的交换机内尝试了LibVal.VAL_1,应该允许.我提供了一个不起作用的代码示例!
class TestClassForEnum {
public static enum TestEnum{ ONE, TWO; }
}
class WhichUsesEnumInsideMethod{
//completely unrelated to TestClassForEnum.TestEnum!!!
public static final int ONE = 0x1282
void doSomethingWithEnum(TestEnum e){
//here I cannot switch:
//FORBIDDEN BY JAVA
switch (e) {
case TestEnum.ONE:
//...
}
//Cannot USE EITHER, because ONE is a static final …Run Code Online (Sandbox Code Playgroud) 这些是我的课程:
namespace MyFirstGame
{
public static class OstacoliManager
{
#region Dichiarazioni
private static List<Ostacolo> ostacoli = new List<Ostacolo>();
private static List<Ostacolo> oggettiSulloSchermo = new List<Ostacolo>();
private static int objectCount = 20;
private static Random rand = new Random();
#endregion
#region Metodi ausiliari
public static void Inizializza()
{
oggettiSulloSchermo.Clear();
for (int i = 0; i < objectCount; i++)
{
//Dalla lista degli ostacoli ne creo tot a caso. Lo faccio da ostacoli e non da texture per l'eventualità in cui abbiano …Run Code Online (Sandbox Code Playgroud) 我在使用C#的ASP.NET中有一个静态变量的问题.我在webform中声明变量.
public partial class Logueado_Movimientos : System.Web.UI.Page
{
static List<ExchangeItems> theList;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostback) return;
theList = GetListValues();
}
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我们测试了网站,没有发现问题,部署了它......但是在生产环境中发生了一些奇怪的事情.这个网站每天都在使用,只有两次,情况已经发生.
ExchangeItems有一个ID属性,它返回数据库中每个要交换的项的id.页面加载时只调用一次GetListValues()方法.之后,用户可以通过单击GridView中的复选框选择要交换的项目,进行进一步的验证,然后有一个"打印并保存"按钮,使用iTextSharp打印到PDF并将状态发送回数据库.
在所有验证之后,该项目已在生产中更改两次.例如,项目180是正在交换的项目,但是当打印和保存文档时,结果是项目103是处理的项目.所有先前的验证都将ID设置为180.项目103甚至不在列表中.
现在,检查数据库(SQL Server),我们发现项目103在项目180后10分钟保存.我们使用GetDate()函数来存储日期和时间.此外,他们被两个不同的用户分配给不同的客户.
用户可能需要10分钟来处理请求,有时他们会与客户通话.这意味着user1正在使用项目180,而user2正在使用项目103,两者都使用相同的模块/ webform.由于变量是静态的,两个用户是否可能正在影响彼此的信息?我现在宣称它是"私人静态",只是出于偏执,但还有什么我不知道的吗?
注意:变量是静态的,因为如果没有声明,则回发会丢失它的值.它不在Session变量中,因为它仅用于该模块/ webform,而不是其他地方.
我的规则是,在原语的情况下,我可以随时声明它们,static因为它们不会消耗太多内存.实际上,我通常使用static原语作为项目常量.
但是,我看到许多程序员也声明了对象static.显然,static对象会增加每个新static对象的内存消耗.
例如,我经常看到该sharedpreference对象被声明为static,因此任何类都可以通过apply()从代码中的任何位置调用来获取更新的信息.我不使用它,但我创建的是实例对象而是以不同的方式处理登录.
那么,我们如何确定我们可以安全地声明某个对象为static?我们是否尝试预测其内存消耗还是有其他更好的方法?
问题的原因是移动设备上占用100MB或RAM的项目.不必要地使用静态对象,因此大量数据不需要保存在RAM中.将静态对象转换为实例对象后,内存消耗降至60MB.
PS.我已经看到在应用程序中使用静态对象的可怕情况,因为程序员懒得正确处理逻辑,这样的应用程序消耗的内存比他们应该多100%.
我正在努力学习Java.
我不明白为什么这段代码不起作用.
它不会Hello World从test()函数输出" " .
我究竟做错了什么?
public class Main {
public test(args) {
System.out.println(args);
}
public static void main(String[] args) {
test('Hello World');
}
}
Run Code Online (Sandbox Code Playgroud) 我想我已经知道了这个问题的答案,因为看来,呃,有点牵强.但我正在认真寻找解决方案.
假设我有一个Activity,称之为蓝牙活动,启动蓝牙背景线程,即使蓝牙活动消失,线程也会永远运行 - 是的,它确实会永远运行.这个蓝牙背景线程是一个数据采集线程,它不断地收集由Activity绘制的数据,实时称之为Plot活动.我们可以将绘图方法称为一个名为Plot.plotData()的静态方法;
我的问题是我无法判断Plot活动何时处于活动状态,因此我无法确定何时开始调用Plot.data().你可能会认为,因为Plot.plotData()是一个静态方法,我可以随时调用它.但事实并非如此.我必须等到Plot通过Intent()和startActivity实例化.否则Plot的onCreate()方法尚未调用,Plot充满了空指针.
我该如何解决这个问题.添加一个最初为false的静态getter/setter,直到onCreate运行?
我正在编写一个简单的PHP类,但是当我尝试在foreach循环中使用变量时,它打印出0(null).但是,当我在该循环之前回显它时,它会打印正确的值.有什么想法吗?
class Search
{
public static $KeyObject=null;
//...KeyObject is assigned some value...
public function resultsToHTML()
{
$KeyObject = $this->KeyObject;
echo "inResults: $KeyObject <br />";
$htmlString = "";
if(!empty($this->resultList))
{
$htmlString .= "<table><th>Results</th><tbody>";
foreach($this->resultList as $row)
{
$htmlString .= "<tr><td>"+$KeyObject+"</td></tr>";
$htmlString .= "<tr>";
foreach($row as $key => $value)
{
$htmlString .= "<td class=\"$key\" id=\"$value\">$value</td>";
}
$htmlString .= "</tr>";
}
$htmlString .= "</tbody></table>";
}
return $htmlString;
}
}
Run Code Online (Sandbox Code Playgroud)
这回来了......
inResults:Player 00000000000000000000000000000000000000000000000000000000000000000000000000000