浅谈static

本文详细介绍了Java中static关键字的应用,包括定义类属性和方法,以及如何利用static统计对象生成次数等实际应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、static关键字定义属性
• 使用static定义的属性表示类属性,类属性可以由类名称直接进行调用;
• static属性虽然定义在了类之中,但是其可以在没有实例化对象的时候进行调用(普通属性保存在堆内存里,而static属性保存在全局数据区之中);
在java中static关键字可以定义属性和方法。

class Person {
    private String name;
    private int age;
    String country = "北京"; 
public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getInfo() {
        return "姓名:" + this.name + ",年龄:" + this.age + ",城市:" + this.country;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        Person per1 = new Person("张三", 20);
        Person per2 = new Person("李四", 21);
        System.out.println(per1.getInfo());
        System.out.println(per2.getInfo());
    }
}

以上的程序内存分配如下:
这里写图片描述
很明显 country属性是相同的:对于有公有属性的成员变量使用static关键字完成

class Person {
         private String name ;
         private int age ;
         static String country = "北京" ; 
         public Person(String name,int age) {
                   this.name = name ;
                   this.age = age ;
         }
         public String getInfo() {
                   return "姓名:" + this.name + ",年龄:" + this.age + ",城市:" + this.country ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   Person per1 = new Person("张三",20) ;
                   Person per2 = new Person("李四",21) ;
                   per1.country = "青岛" ;
                   System.out.println(per1.getInfo()) ;
                   System.out.println(per2.getInfo()) ;       
         }
}

以下是程序在内存中的分配情况
这里写图片描述
当new (类名)时才会在堆内存中开辟一个空间,其中的方法才可以被调用。
1.只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少个对象,甚至根本不需要创建任何对象。
2.希望某个方法不与包含他的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用方法。
二、使用static关键字定义方法
使用static定义的方法同样可以在对象初始化之前被调用

class Person {
         private String name ;
         private int age ;
         private static String country = "北京" ;  
         public Person(String name,int age) {
                   this.name = name ;
                   this.age = age ;
         }
         public static void setCountry(String c) {
                   country = c ;
         }
         public static String getCountry() {
                   return country ;
         }
         public String getInfo() {
                   return "姓名:" + this.name + ",年龄:" + this.age + ",城市:" + this.country ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                  Person.setCountry("青岛") ;      // 类.static方法()
                   System.out.println(Person.getCountry()) ;
                   Person per1 = new Person("张三",20) ;
                   System.out.println(per1.getInfo()) ;
         }
}

三、在实际的使用过程中使用static关键字

1.统计生成对象的个数
一个类在使用过程中会被调用多次。一个类中的构造器(用户没有定义自己的构造器,jvm会默认生成一个无参构造器)在初始化时构造器一定会被调用,因此可以在构造器中使用static定义变量

class Person {
         private static int count = 0 ;
         public Person() { 
                   System.out.println("对象个数:" + ++ count) ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   new Person() ;new Person() ;new Person() ;
         }
}

初学还望指正

### Spring Boot框架简介与使用方法 Spring Boot 是由 Pivotal 团队提供的一个开源框架,旨在简化基于 Spring 框架的项目开发过程。它遵循“约定大于配置”的设计原则,减少了开发者在配置上的工作量[^2]。通过内置的默认配置和自动化配置机制,Spring Boot 提供了快速构建独立、生产级别的 Spring 应用程序的能力。 #### 1. Spring Boot 的核心概念 Spring Boot 的核心理念是减少开发者的负担,提供开箱即用的功能。以下是 Spring Boot 的几个关键特性: - **自动化配置**:Spring Boot 根据类路径中的依赖项自动配置 Spring 应用程序。例如,当引入数据库驱动依赖时,Spring Boot 会自动配置数据源和相关的 Bean 对象[^2]。 - **嵌入式服务器**:Spring Boot 内置了 Tomcat、Jetty 或 Undertow 等 Web 容器,使得应用程序可以独立运行而无需外部部署环境。 - **起步依赖(Starters)**:Spring Boot 提供了一系列的 Starter 模块,这些模块封装了常用的依赖和配置,方便开发者快速集成各种功能。例如,`spring-boot-starter-web` 提供了构建 Web 应用所需的所有依赖[^2]。 - **监控支持**:通过引入 `spring-boot-starter-actuator` 依赖,开发者可以获得丰富的监控指标,包括应用健康状态、线程池信息、内存使用情况等[^1]。 #### 2. Spring Boot 的执行流程 Spring Boot 的主要执行流程可以分为以下几个阶段: - **加载配置**:Spring Boot 从多个来源(如 `application.properties` 或 `application.yml` 文件)加载配置属性,并将其注入到应用程序中。 - **自动化配置**:根据类路径中的依赖项和配置属性,Spring Boot 自动配置 Spring 上下文。 - **启动嵌入式容器**:如果应用程序是一个 Web 应用,Spring Boot 将启动嵌入式 Web 容器。 - **运行应用程序**:完成上述步骤后,Spring Boot 启动应用程序并开始处理请求[^1]。 #### 3. 创建一个简单的 Spring Boot 项目 以下是创建和运行一个简单 Spring Boot 项目的步骤: 1. **添加依赖** 在 `pom.xml` 文件中添加 Spring Boot 的依赖项: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 2. **编写主类** 创建一个包含 `@SpringBootApplication` 注解的 Java 类: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 3. **创建控制器** 添加一个 REST 控制器来处理 HTTP 请求: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, Spring Boot!"; } } ``` 4. **运行项目** 使用以下命令运行项目: ```bash mvn spring-boot:run ``` 访问 `http://localhost:8080/hello` 即可看到输出结果。 #### 4. Spring Boot 的优势 Spring Boot 提供了诸多优点,使其成为现代 Java 开发的首选框架之一: - **快速集成**:通过 Starter 模块,开发者可以秒级集成各种框架[^2]。 - **减少配置**:完全抛弃繁琐的 XML 配置,采用注解和配置文件的方式进行开发[^2]。 - **内置监控**:通过 Actuator 模块,开发者可以获取丰富的监控指标[^1]。 - **易于扩展**:虽然 Spring Boot 本身是一个微框架,但它可以通过 Spring Cloud 等工具扩展以支持服务发现、注册、负载均衡等功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值