草庐IT

VARIABLES

全部标签

Java OOP 公共(public)、私有(private)、 protected

我了解public、private和protected的作用。我知道您应该使用它们来遵守面向对象编程的概念,并且我知道如何在使用多个类的程序中实现它们。我的问题是:我们为什么要这样做?为什么我不应该让一个类直接修改另一个类的全局变量?即使您不应该,为什么还需要protected、private和public修饰符?就好像程序员不相信自己不会这样做,即使他们是编写程序的人。提前致谢。 最佳答案 你是对的,这是因为我们不能相信自己。可变状态是计算机程序复杂性的一个主要因素,构建一开始看起来不错的东西太容易了,但随着系统变大,它会失去控制

java - 如何观察变量的变化

我想知道是否有任何方法可以让我在程序运行时观察变量值的变化。当然不使用调试器,我想以编程方式。例如:classA{publicstaticintvalueToBeWatched;}所以在运行时,如果我项目中任何类的任何方法修改了这个值,MyValueChangeListner事件应该被调用。 最佳答案 你不能。Java本身没有内置修改修改Hook。显然,您可以进行轮询。但那样就不会“直播”了。AspectJ可能允许这样的想法,但我不确定它是否适用于原始变量,或者仅当您使用getter和setter时才适用。干净的Java方式是使变量

java - 如果类都包含很多有用的类变量,是否会对性能产生影响?

每当我编写一个新类时,我都会使用大量的类变量来描述该类的属性,以至于当我回过头来查看我输入的代码时,我会看到40到50多个类变量,无论它们是公共(public)的、protected还是私有(private)的,它们在我定义的整个类中都被显着地使用。尽管类变量主要由原始变量组成,如boolean值、整数、double等,但我仍然有这种不安的感觉,因为我的一些具有大量类变量的类可能会对性能产生影响,无论它们多么微不足道。但尽可能理性,如果我考虑无限的RAM大小和无限的Java类变量,Java类可能是RAM中无限大的内存块,该block的第一部分包含类变量分区,并且block的其余部分包含

java - 如何在 Java 中的另一个类中使用一个类的变量?

我只是在为即将到来的考试做一些练习,但有一件事我无法理解,那就是在另一个类中使用属​​于一个类的变量。我有一个Course类和一个Student类。Classcourse存储所有不同的类(class),我只想在Student类中使用类(class)名称。这是我的类(class)类:publicclassCourseextendsStudent{//instancevariables-replacetheexamplebelowwithyourownprivateAwardcourseAward;privateStringcourseCode;publicStringcourseTitl

java - 在Java中构造函数之前初始化最终变量

是否有在Java构造函数中使用最终变量的解决方案?问题是,如果我初始化一个final字段,例如:privatefinalStringname="aname";那么我就不能在构造函数中使用它了。Java首先运行构造函数,然后运行字段。有没有一种解决方案可以让我访问构造函数中的final字段? 最佳答案 我不太明白你的问题。那个publicclassTest3{privatefinalStringtest="test123";publicTest3(){System.out.println("Test="+test);}publicst

java - 智能 : move variables at method start

我使用IntelliJUltimate来处理Java。有这么多有用的功能,但有一个可能对我来说非常好,但我找不到......有时我会在没有事先声明的情况下使用变量(第一次)。然后,我在未声明的变量上使用ctrl+Enter功能打开菜单并选择自动声明的选项。有时只是速度更快。效果很好,问题是变量会在使用的那一行自动声明。现在,我想要IntelliJ中的一个函数,它可以自动将所有声明移动到方法开头的位置。它存在吗?或者我该如何实现? 最佳答案 没有将所有声明移动到方法开始的功能(并且没有计划添加它,因为大多数编码指南建议声明变量尽可能接

java - 在 Java 中访问内部类中的静态最终字段

当我尝试编译以下代码时,出现编译错误:unexpectedtypeSystem.out.println(newTest().C.i);^required:class,packagefound:valueclassTest{classC{staticfinalinti=0;}publicstaticvoidmain(String...z){System.out.println(newTest().C.i);}}但是,如果我将newTest().C.i更改为newTest().newC().i,它编译得很好。为什么?如果我在C中是静态的,那么我就不必实例化C。我应该能够通过类C调用它,而不

java - C 中的#define 类似于Java 中的静态变量吗?

在C中我们可以这样写:#defineLOWER0在Java中我们可以这样写:staticintlower=0;这些语句不都是为了让其他方法使用变量lower吗? 最佳答案 它们完全不同。Define更像是C预处理器使用的复制粘贴。Static是Java类的属性修饰符。静态属性可以在运行时更改。 关于java-C中的#define类似于Java中的静态变量吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

java - 在 Java 中重新声明循环内的变量

在Java中,我们不能将一个变量声明在与另一个具有相同名称的变量相同的范围内:intsomeInteger=3;...intsomeInteger=13;语法错误,无法编译。然而,如果我们把它放在一个循环中:for(inti=0;i不产生任何错误,效果很好。我们基本上是在声明相同的变量。是什么原因?我不知道/不明白这背后的逻辑是什么? 最佳答案 这样想,每次循环之后,作用域就“销毁”了,变量也就没了。在下一个循环中,创建了一个新的范围,并且可以在该范围内再次声明该变量。出于类似的原因,您也可以这样做{intsomeInteger=3

java - 错误 : cannot assign a value to final variable

我正在做一个赋值,但我遇到了这个错误:无法为最终变量计数赋值到目前为止,这是我的代码...publicclassList{privatefinalintMax=25;privatefinalintcount;privatePersonlist[];publicList(){count=0;list=newPerson[Max];}publicvoidaddSomeone(Personp){if(count我是java的新手,显然不是计算机高手,所以请尽可能用最简单的术语解释问题/解决方案。非常感谢。 最佳答案 count++;会抛出