public class StaticDemo { static String str="hello"; int i=10; static void staticMethod() { System.out.println("static method"); } void non_staticMethod() { System.out.println("not static method"); staticMethod(); } public static void main(String args[]) { StaticDemo st=new StaticDemo(); st.staticMethod(); st.non_staticMethod(); System.out.println(st.i); System.out.println(StaticDemo.str); } } 写出程序的输出结果(按顺序)。
时间: 2023-12-14 19:38:16 浏览: 106
程序的输出结果为:
```
static method
not static method
static method
10
hello
```
解释:
- 在main方法中,首先创建了一个StaticDemo对象st。
- 接着,通过st对象调用staticMethod()方法,输出"static method"。
- 然后,通过st对象调用non_staticMethod()方法,输出"not static method",接着又调用staticMethod()方法,输出"static method"。
- 最后,输出st对象的属性i的值10和类属性str的值"hello"。
相关问题
无法从 static 上下文引用 'Javademo. Hello. this'
这个错误信息表明你试图在一个静态上下文中(通常是在静态方法或静态常量内部)引用 `this` 关键字。在 Java 中,`this` 关键字用于当前类的对象实例,但静态方法没有所属的对象实例,所以不能使用 `this`。
具体来说:
1. **非静态上下文**:在成员变量、构造函数、实例方法等非静态的方法中,你可以使用 `this` 来引用当前对象的实例。
```java
public class Javademo {
public void hello() {
System.out.println("Hello, " + this); // 在实例方法中使用 this
}
}
// 创建对象并调用方法
Javademo demo = new Javademo();
demo.hello(); // 输出 "Hello, Javademo@"
```
2. **静态上下文**:在静态方法(如 `static` 声明的方法)、静态块、静态初始化器或类级别的常量(如 `final static` 类属性)中,由于没有特定的对象实例,`this` 是不可用的。
```java
public class Javademo {
public static void staticMethod() {
// 这里尝试使用 this 将导致编译错误,因为这是个静态方法
// System.out.println("Hello, " + this);
}
}
```
为了解决这个问题,如果你需要在静态上下文中引用某些与类关联的数据,可能需要考虑以下几种替代方案:
- 使用类名(`Javademo.class`)代替 `this`,但这通常适用于访问类的静态字段或方法。
- 如果数据本来就应该属于静态范围,那么考虑创建一个静态变量来存储它。
如果你遇到了具体的代码示例,我可以帮助你找到合适的解决方案。
public static class
`public static class` 是Java中的一种特殊类定义方式,它具有两个关键特性:
1. **公共访问权限** (public): 这意味着该类可以从任何包中的其他类访问,提高了类的可见性和重用性。
2. **静态成员** (static): 其内的所有成员(字段和方法)都是类级别的,而不是某个类实例的级别。这意味着你可以直接通过类名来访问这些静态成员,无需创建类的实例。例如,静态方法不需要使用 `new` 关键字,可以通过 `ClassName.methodName()` 调用。
```java
// 示例
public static class MyClass {
// 类的静态字段
public static String sharedField = "Hello World";
// 类的静态方法
public static void staticMethod() {
System.out.println(sharedField);
}
}
// 调用静态方法
MyClass.staticMethod(); // 直接调用,无需创建 MyClass 的实例
```
在Java设计模式中,`public static class` 可以用于实现Builder模式,其中静态工厂方法返回一个构建器实例,简化了构造过程,特别是当构造过程比较复杂时。
然而,需要注意的是,虽然静态类可以避免单例模式中多例的风险,但过度依赖静态类可能导致软件结构过于紧密耦合,维护起来可能会更困难。
阅读全文
相关推荐
















