我正在实验用Java初始化不同类型的变量。我可以在构造函数中初始化最终变量(例如,最终变量b)和静态变量(例如静态int c),但不能在构造函数中初始化静态最终变量(例如,静态最终变量d)。IDE还显示错误消息。
为什么Java不允许在构造函数中初始化静态最终变量?
public class InitialisingFields {
int a;
final int b;
static int c;
static final int d;
InitialisingFields(){
a = 1;
b = 2;
在java语言中,最后一个字段在初始化时有一个即时的值,不能再修改了。在java字节码(jasmin)中,如果我创建了最后一个字段,它将忽略初始化时分配给它的即时值,并且可以像以后的任何其他变量一样对其进行更改。
例如。java代码:
public class App{
final int CONST = 2;
App(){
CONST = 3;
}
public static void main(String[] args){
App app = new App();
}
}
输出:
App.java:4 error:
因此,在像C这样的语言中,内存被分成5个不同的部分:操作系统内核、文本段、静态内存、动态内存和堆栈。如下所示:
如果我们在C中声明了一个静态数组,你必须事先指定它的大小,之后它将永远是固定的。程序将为数组分配足够的内存,并按预期将其放在静态数据段中。
然而,我注意到在Java中,你可以这样做:
public class Test {
static int[] a = new int[1];
public static void main( String[] args ) {
a = new int[2];
我最近深入研究了java。在Java 7中,“静态变量”和“静态方法”存储在“方法区域”中,但是自从Java 8之后,我在JVM规范中看到了这句话
The proposed implementation will allocate class meta-data in native memory and move interned Strings and class statics to the Java heap --有一篇文章说静态变量,垃圾收集器不能删除静态类,也有文章说静态类不能被垃圾收集器删除(因为Java8静态类,静态变量在堆内存中),我现在很困惑。
总结,其中静态方法、静态变量、
A.java:
public class A {
public static StartActivity startActivity;
}
B.java:
public class StartActivity extends Activity
public void onCreate(Bundle savedInstanceState) {
A.activity = this;
}
}
从上面的两个java文件中,我想问一下a.activity = this;是什么意思?这是否意味着创建一个新的活动实例?
在Java类的静态块中声明的非静态变量存储在哪里?从逻辑上看,它们似乎必须存储在堆中--即使它们是原始变量。这是正确的吗?如果不是,它们存放在哪里?
编辑:考虑以下代码:
import java.io.*;
class book
{
static
{
int a = 1; // Where does this variable get stored?
pen p = new pen(); // Where does this reference get stored?
System.out.println(a);
}
}
在java中,如果我重载方法,如下所示
public void test (int a,int b)
public int test(String str)
public boolean test (float a)
那么,上述所有方法对于每个测试都将使用相同或不同的内存。如果它们共享相同的内存位置,那么它将如何在多线程环境中工作。
谢谢
public Class A {
public static String s = "s";
public static int i = 0;
public int j = 1;
public static String getStaticString() {
int k = 2;
return s;
}
public String getString() {
int l = 3;
return "something";
}
}
在Java中,
请参阅下面的代码--
public interface TestInterface {
public static String NON_CONST_B = "" ;
}
public class Implemented implements TestInterface {
public static String NON_CONST_C = "" ;
}
public class AutoFinal {
public static String NON_CONST_A = "" ;
public st
程序1:当我编写一个简单的类B而没有在java程序中创建对象时。JVM如何将内存分配给包含成员字段和成员函数的类代码。
class B
{
int a=10;
public void print()
{
System.out.println("inside B class");
}
}
程序2:当我创建该类的对象时,那么jvm如何为下面的object...see代码分配内存
class B
{
int a=10;
public void print()
{
System.out.
Python类属性和Java静态属性之间有什么区别?
例如,
在Python中
class Example:
attribute = 3
在Java中
public class Example {
private static int attribute;
}
在Python中,可以使用对实例的引用来访问静态属性?