在C++中,我可以在多个文件中使用1个类,当我使用一个文件中的函数修改值时,它将全局更改该值.
在Java中,每个文件都必须拥有自己的类; 当我使用一个文件中的方法更改值时,它不会全局更改此值.
例如,在C++中,文件可能如下所示:
someClass.h
class someClass{
private:
int x;
public:
//Constructor
someClass(){
x = 5;
}
void changeVariable(); //Declaring function for later
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
int main(){
someClass cClass;
cClass.changeVariable(); //Call function
cout << x; //outputs 6
}
Run Code Online (Sandbox Code Playgroud)
fileA.cpp
void someClass::changeVariable(){
x = 6; //x is changed to 6 globally.
}
Run Code Online (Sandbox Code Playgroud)
在Java中:
someClass.java
public class someClass {
int x;
//Constructor
public someClass() {
x = 5;
}
Run Code Online (Sandbox Code Playgroud)
main.java
public class main {
public static void main() {
someClass cClass = …Run Code Online (Sandbox Code Playgroud) 我明白这是指当前的对象.所以不使用objectname.fun(objectname.nonstaticmember),为什么我不能使用objectname.fun(this.nonstaticmember)
请参考下面的示例,并在最后看到最后两条评论.
public class Question
{
int data;
void myfun(int data)
{
System.out.println("data=="+data);
}
public Question(int data)
{
this.data = data;
// TODO Auto-generated constructor stub
}
public static void main(String[] args)
{
Question question = new Question(10);
//question.myfun(question.data);//WORKS
question.myfun(this.data);//DOES NOT WORK
}
}
Run Code Online (Sandbox Code Playgroud) public class myclass{
static{
//some statements here
}
//some variables declared here
//some functions defined here
}
Run Code Online (Sandbox Code Playgroud) 我是c ++开发人员,并试图熟悉Core Java概念.我发现这个令人困惑的是我的最终静态是在构造对象后无法改变的东西.(如果我错了,请纠正我)
我遇到了下面的实现,我发现这令人困惑,因为它似乎允许将值添加到Map中,即使它是最终静态的
public class MockUserServiceImpl implements UserService {
private static final Map<String, User> userMap = new HashMap<String, User>();
public static void addUserToCache(int userId, String userName) {
if (!userMap.containsKey(userName)) {
userMap.put(userName, new User(userId, userName));
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以试着解释一下这里的静态决赛是什么意思
所以我应该创建一个程序,我有一个带有5个气泵的加油站,而且我不知道如何跟踪统计数据,程序正确地减去了从油箱类型中留下的气体量但是当下一个客户抽气时,统计数据会被删除?任何帮助将不胜感激,这是我的代码.请记住,这是5级课程的一部分,这只是一部分.
import java.util.Random;
import java.util.Scanner;
public class GasPump
{
static Scanner Input = new Scanner (System.in);
private static double totalRevenue;
private static double currentPurchase;
//private int currentGasType;
private static double currentGasType;
private static double currentGasAmount;
private Client currentClient;
private int clock;
private static double regularTank;
private static double plusTank;
private static double supremeTank;
//private static double amountLeftInTank;
public void updatePump()
{
if (currentClient != null)
{
clock--;
if (clock == 0)
{
//totalRevenue += currentPurchase;
totalRevenue = totalRevenue + currentPurchase; …Run Code Online (Sandbox Code Playgroud) 主要方法(Java请求您在类中拥有)是否必须是静态的?例如,我有这个代码
public class Sheet {
public static void main(String[] args) {
myMethod();
}
public void myMethod() {
System.out.println("hi there");
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误
无法对main的非静态调用方法进行静态引用
如果我清楚了,我从方法调用的任何方法都main必须是静态的,并且我从静态方法调用的每个方法都必须是静态的.
为什么我的全班(如果我们更进一步,我的整个程序)和方法必须是静态的?我怎么能避免这种情况?
最近我问了一个问题,为什么我生成的项目中的所有变量都被设置为相同的损坏值(Java switch语句输出相同的数字)并且代码不应该受到责备,但经过一些深度调试后我发现当一个项目产生它随机化损害然后由于某种原因设置对每个先前创建的相同类型的项目的损害.
我有'匕首'和'剑'课程,扩展了我的'项目'课程.这就是我设置伤害的方法:
case 3: {Sword sword = new Sword(); World[X][Y].treasureName = "sword"; sword.setDamage(4); returnItem = sword; break;}
Run Code Online (Sandbox Code Playgroud)
这是我的项目类:
public abstract class Item {
//How much damage is added to the players attack.
static int damage = 0;
static int defence = 0;
public int getDefence() {
return defence;
}
public void setDefence(int defenceValue) {
defence = defenceValue;
}
public int getDamage() {
return damage;
}
public void setDamage(int damageValue) {
damage = damageValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我的剑类:
public …Run Code Online (Sandbox Code Playgroud) 我有一个带有静态方法的单例类 getNext()
public class Sequence {
private static Sequence instance;
private static int counter;
private Sequence () { // note: private constructor
counter = 0;
}
public static Sequence getInstance(){
if(instance==null) { // Lazy instantiation
instance = new Sequence();
}
return instance;
}
public static int getNext(){ return ++counter;}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试代码中,我有一个for循环,它调用getNext()了几次
public class TestSequence {
public static void main(String[] args) {
for (int i = 0; i < 5; i++)
System.out.println(Sequence.getNext());
}
Run Code Online (Sandbox Code Playgroud)
}
它的输出是
1
2
3
4 …Run Code Online (Sandbox Code Playgroud) 我对Java List <>类有奇怪的行为,它会覆盖添加了最后一个值的所有值.
以下面的代码为例......
import java.io.*;
import java.sql.*;
import java.lang.*;
import java.util.*;
public class alist
{
//
public static class item
{
public static String name;
public static long type;
item() {}
item( String n, long t )
{
name = n;
type = t;
}
public String toString()
{
return "name: " + name +
", type: " + String.valueOf( type );
}
}
public static void main(String [] args)
{
List<item> lst = new ArrayList<item>();
lst.add( new item( …Run Code Online (Sandbox Code Playgroud) 你好,想象我们有以下课程
Manager{
public static void doSth(){
// some logic
};
}
Run Code Online (Sandbox Code Playgroud)
如何在Kotlin中覆盖该方法?
我累了用
fun Manager.doSth(){}
Run Code Online (Sandbox Code Playgroud)
但它适用于实例,而不是静态类型。
这样做的目的是避免使用PowerMockito