在Java中,静态最终变量是常量,惯例是它们应该是大写的.但是,我已经看到大多数人声称记录器是小写的,这在PMD中是违规的.
例如:
private static final Logger logger = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
我们应该使用LOGGER吗?
我现在正在建立一个网站,我正在努力决定是否应该让它变得流畅.固定宽度的网站更容易制作,也更容易使它们看起来一致.
说实话,我个人更喜欢看流体网站延伸到我的显示器的整个宽度.我的问题来自这样一个事实:在大多数现代浏览器中,您可以控制并滚动鼠标滚轮以基本调整任何网站的大小.
那么创建一个值得麻烦的流畅网站呢?
我有几个不需要任何州的课程.从组织的角度来看,我想把它们放到层次结构中.
但似乎我无法为静态类声明继承.
像这样的东西:
public static class Base
{
}
public static class Inherited : Base
{
}
Run Code Online (Sandbox Code Playgroud)
不管用.
为什么语言的设计者会关闭这种可能性?
我正在查看Java代码,LinkedList并注意到它使用了静态嵌套类Entry.
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
Run Code Online (Sandbox Code Playgroud)
使用静态嵌套类而不是普通内部类的原因是什么?
我能想到的唯一原因是,Entry无法访问实例变量,因此从OOP的角度来看,它具有更好的封装.
但我认为可能有其他原因,也许是表现.可能是什么?
注意.我希望我的条款正确,我会称之为静态内部类,但我认为这是错误的:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
假设我有一个旨在实例化的类.我在类中有几个私有的"帮助器"方法,它们不需要访问任何类成员,并且只对它们的参数进行操作,返回结果.
public class Example {
private Something member;
public double compute() {
double total = 0;
total += computeOne(member);
total += computeMore(member);
return total;
}
private double computeOne(Something arg) { ... }
private double computeMore(Something arg) {... }
}
Run Code Online (Sandbox Code Playgroud)
有没有特别的理由指定computeOne和computeMore作为静态方法 - 或任何特殊原因不?
将它们保持为非静态是最容易的,即使它们肯定是静态的而不会引起任何问题.
关键字static是一个在C++中具有多种含义的关键字,我发现它非常令人困惑,我永远无法理解它实际上应该如何工作.
根据我的理解,static存储持续时间,这意味着它在全局的情况下持续程序的生命周期,但是当你谈论本地时,它意味着它默认为零初始化.
C++标准对具有关键字的类数据成员说明了这一点static:
3.7.1静态存储持续时间[basic.stc.static]
3关键字static可用于声明具有静态存储持续时间的局部变量.
4应用于类定义中的类数据成员的关键字static为数据成员提供静态存储持续时间.
局部变量是什么意思?这是一个函数局部变量吗?因为还有一个当你声明一个本地函数时static,它只被初始化一次,它第一次进入这个函数.
它也只谈到关于类成员的存储持续时间,它是非实例特定的,那也是staticno 的属性?或者是存储持续时间?
那么static和文件范围的情况如何呢?是否所有全局变量都被视为默认具有静态存储持续时间?以下(来自第3.7.1节)似乎表明:
1所有没有动态存储持续时间,没有线程存储持续时间且不是本地的变量都具有静态存储持续时间.这些实体的存储应持续该计划的持续时间(3.6.2,3.6.3)
如何static与变量的链接相关?
整个static关键字是彻头彻尾的混乱,有人可以澄清英语的不同用途,并告诉我何时初始化一个static类成员?
我想调用main静态的方法.我得到了类型的对象Class,但我无法创建该类的实例,也无法调用该static方法main.
在ASP.NET网站上,是每个Web请求唯一的静态类,还是在需要时实例化它们并在GC决定处理它们时进行GC操作?
我问的原因是因为我之前在C#中编写了一些静态类,并且行为与我预期的不同.我希望静态类对每个请求都是唯一的,但似乎并非如此.
如果它们并非每个请求都是唯一的,那么有没有办法让它们成为现实?
更新:
答案给了我正是我所需要的.我已经在使用单例类,但是它使用的是一个静态实例,因此即使用户不同也在请求之间共享,在这种情况下这是一件坏事.使用HttpContext.Current.Items完美地解决了我的问题.对于任何在将来偶然发现这个问题的人来说,这是我的实现,简化和缩短,以便易于理解模式:
using System.Collections;
using System.Web;
public class GloballyAccessibleClass
{
private GloballyAccessibleClass() { }
public static GloballyAccessibleClass Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if(!items.Contains("TheInstance"))
{
items["TheInstance"] = new GloballyAccessibleClass();
}
return items["TheInstance"] as GloballyAccessibleClass;
}
}
}
Run Code Online (Sandbox Code Playgroud) 将static关键字添加到方法时意味着什么?
public static void doSomething(){
//Well, do something!
}
Run Code Online (Sandbox Code Playgroud)
你能把static关键字添加到课堂吗?那意味着什么?
如果我有一个函数(比方说,一个大阵列)内的变量,它是有意义的声明它既static和constexpr?constexpr保证数组是在编译时创建的,那么它会static没用吗?
void f() {
static constexpr int x [] = {
// a few thousand elements
};
// do something with the array
}
Run Code Online (Sandbox Code Playgroud)
static在生成的代码或语义方面,实际上是在做什么吗?