理解Java中的static和final:内存分配与访问特性

需积分: 9 1 下载量 157 浏览量 更新于2024-09-16 收藏 37KB DOC 举报
"Java中的'static'和'final'是两个重要的关键字,它们各自有着独特的用途和行为特性。首先,'static'用来标记成员变量和成员方法为全局或静态,这意味着它们与类的实例无关,而是类本身的一部分。静态变量在类加载时就已经初始化,并且在整个程序运行期间只有一份拷贝,这在内存管理上具有节省空间的优势。静态方法同样无需创建类的实例即可被访问,可以通过类名直接调用,这使得它们在需要类级操作而非实例操作的场景下非常有用。 被static修饰的变量通常被称为类变量,如`ClassVar`,可以通过`ClassName.ClassVar`的形式直接访问。然而,尽管静态变量可以通过类名访问,但建议仅在确实需要全局共享的情况下使用,避免在实例方法中直接操作,以保持代码清晰和避免潜在的并发问题。 另一方面,'final'用于修饰变量或方法,表示其值不可变或方法不可重写。对于变量,一旦赋值,就不能再更改(常量);对于方法,表示该方法不能有任何子类重写。这对于提高代码的安全性和确定性有很大帮助,尤其是在多态和继承的上下文中。 值得注意的是,静态变量虽然可以被private修饰,但这并不意味着它们完全隐藏起来,只是限制了外部类的直接访问,只能在类的内部访问。同时,静态代码块在类加载时执行,提供了初始化静态资源的便捷时机。 理解和掌握'static'和'final'的关键在于它们如何影响代码的生命周期、内存管理和可重用性。在编写Java代码时,合理运用这两个特性可以提升代码的组织和性能,避免不必要的复杂性。"

package XXLChess; //import org.reflections.Reflections; //import org.reflections.scanners.Scanners; import processing.core.PApplet; import processing.core.PImage; import processing.data.JSONObject; import processing.data.JSONArray; import processing.core.PFont; import processing.event.MouseEvent; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.awt.Font; import java.io.*; import java.util.*; public class App extends PApplet { public static final int SPRITESIZE = 480; public static final int CELLSIZE = 48; public static final int SIDEBAR = 120; public static final int BOARD_WIDTH = 14; public static int WIDTH = CELLSIZE*BOARD_WIDTH+SIDEBAR; public static int HEIGHT = BOARD_WIDTH*CELLSIZE; public static final int FPS = 60; public String configPath; public App() { this.configPath = "config.json"; } /** * Initialise the setting of the window size. */ public void settings() { size(WIDTH, HEIGHT); } /** * Load all resources such as images. Initialise the elements such as the player, enemies and map elements. */ public void setup() { frameRate(FPS); // Load images during setup // PImage spr = loadImage("src/main/resources/XXLChess/"+...); // load config JSONObject conf = loadJSONObject(new File(this.configPath)); } /** * Receive key pressed signal from the keyboard. */ public void keyPressed(){ } /** * Receive key released signal from the keyboard. */ public void keyReleased(){ } @Override public void mouseClicked(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { } /** * Draw all elements in the game by current frame. */ public void draw() { } // Add any additional methods or attributes you want. Please put classes in different files. public static void main(String[] args) { PApplet.main("XXLChess.App"); } }

339 浏览量

package com.bolt.gateway.config; import com.bolt.gateway.handler.HystrixFallbackHandler; import com.bolt.gateway.props.AuthProperties; import com.bolt.gateway.props.RouteProperties; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.cors.reactive.CorsUtils; import org.springframework.web.filter.reactive.HiddenHttpMethodFilter; import org.springframework.web.reactive.function.server.RequestPredicates; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.RouterFunctions; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; /** * 路由配置信息 * * @author arch_group */ @Slf4j @Configuration @AllArgsConstructor @EnableConfigurationProperties({RouteProperties.class, AuthProperties.class}) public class RouterFunctionConfiguration { /** * 这里为支持的请求头,如果有自定义的header字段请自己添加 */ private static final String ALLOWED_HEADERS = "x-requested-with, zkpt-ks-auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client"; private static final String ALLOWED_METHODS = "*"; private static final String ALLOWED_ORIGIN = "*"; private static final String ALLOWED_EXPOSE = "*"; private static final String MAX_AGE = "18000L"; private final HystrixFallbackHandler hystrixFallbackHandler; @Bean public WebFilter corsFilter() { return (ServerWebExchange ctx, WebFilterChain chain) -> { ServerHttpRequest request = ctx.getRequest(); if (CorsUtils.isCorsRequest(request)) { ServerHttpResponse response = ctx.getResponse(); HttpHeaders headers = response.getHeaders(); headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS); headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS); headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN); headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE); headers.add("Access-Control-Max-Age", MAX_AGE); headers.add("Access-Control-Allow-Credentials", "true"); if (request.getMethod() == HttpMethod.OPTIONS) { response.setStatusCode(HttpStatus.OK); return Mono.empty(); } } return chain.filter(ctx); }; } @Bean public RouterFunction routerFunction() { return RouterFunctions.route( RequestPredicates.path("/fallback") .and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), hystrixFallbackHandler); } /** * 解决springboot2.0.5版本出现的 Only one connection receive subscriber allowed. * 参考:https://github.com/spring-cloud/spring-cloud-gateway/issues/541 */ @Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new HiddenHttpMethodFilter() { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return chain.filter(exchange); } }; } }

211 浏览量

public class LoginBean { private String username; private String password; // 数据库连接设置 private static final String DB_URL = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai"; private static final String DB_USERNAME = "root"; private static final String DB_PASSWORD = "123456"; public LoginBean(String username, String password) { this.username = username; this.password = password; } public boolean validate() { try { // 加载 MySQL 驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 连接数据库 Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD); String query = "SELECT * FROM user WHERE username = ? AND password = ?"; PreparedStatement stmt = conn.prepareStatement(query); stmt.setString(1, username); stmt.setString(2, password); ResultSet rs = stmt.executeQuery(); if (rs.next()) { return true; // 用户名和密码匹配 } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { System.err.println("连接数据库时出现异常:" + e.getMessage()); e.printStackTrace(); } return false; // 登录失败 }public class LoginAction extends ActionSupport { private String username; private String password; private LoginBean loginBean; // Getter 和 Setter 方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } // 登录操作 public String execute() { loginBean = new LoginBean(username, password); if (loginBean.validate()) { return "SUCCESS"; // 登录成功 } else { return "LOGIN"; }

2025-03-10 上传