一、 static 定义属性

static 定义的属性和非 static 定义的属性有一个最大区别:所有的非 static 属性必须产生实例化对象之后才可以访问,static 定义的属性不受此限制。也就是说,在没有实例化对象产生的情况下,依然可以使用 static 属性。

static 定义属性的一个特征:虽然定义在类结构里面,但是并不受对象的控制,是独立于类存在的。

二、static 定义方法

static 定义方法的时候也可以在没有实例化对象产生的时候利用类名称直接调用。

1、static 方法和非 static 方法区别

  • static 方法不能直接访问非 static 属性和 非 static 方法,只能调用 static 属性和方法;

  • 非 static 方法 可以直接访问 static 属性和方法,不受任何的限制。

分析:为什么会存在以上的限制?

  • 所有非static 定义的结构,必须在类已经明确产生了实例化对象之后才会分配堆内存空间,才可以使用。
  • 所有 static 定义的结构,不受实例化对象的控制,即可以在没有实例化对象的时候访问。

2、什么时候使用 static 方法?

​ 类里面没有任何的属性存在,只有方法,建议将所有的方法定义为 static 方法,这样就不用在每次调用的时候再产生实例化对象了。

三、主方法

观察主方法的每一个构成:

  • public:主方法是程序的开始,所以这个方法对任何的操作都一定是可见的,既然可见就必须使用public。
  • static:不需要产生实例化对象,由类名称调用。编译运行 java 程序时我们是在命令行里执行: java 类名称。
  • void:主方法是一切执行的开始点,既然是所有的开头,那么就不能回头(return),执行完毕为止。
  • main:是一个系统规定好的方法名称,不能修改。
  • String args[]:指的是程序运行时传递的参数,例子如下。

示例代码:

public class Test{
public static void main(String args[]){
for(int x=0; x< args.length; x++){
System.out.println(args[x]);
}
}
}

所有输入的参数必须使用空格分隔,例如: java Test adc tef sdf sdg。

四、static 的实际应用

之前的结论:

  • 不管有多少个对象,都使用同一个 static 属性;
  • 使用 static 方法可以避免掉实例化对象调用方法的限制。

功能一:实现实例化类对象个数的统计

希望每当实例化一个对象的时候,输出”这是产生的第x个实例化对象“

class Book{
private static int num = 0;
public Book(){
num ++ ;
System.out.println("这是产生的第" + num + "个实例化对象。");
}
}
public class TestBook{
public static void main(String [] args){
new Book();new Book();new Book();new Book();new Book();
}
}

功能二:实现属性的自动设置

例如现在某一个类有一个无参构成方法、一个有参构造方法,有参构造方法主要目的是传递一个 title 属性,希望调用的不管是有参还是无参构造,都可以为 title 设置内容。

class Book{
private String title;
private static int num = 0;
public Book(){
this.title = "Native-" + (num++);
}
public Book(String title){
this.title = title;
}
public String getTitle(){
return this.title;
}
}
public class TestBook{
public static void main(String [] args){
System.out.println(new Book("Java").getTitle());
System.out.println(new Book().getTitle());
System.out.println(new Book().getTitle());
System.out.println(new Book().getTitle());
}
}

此时就算是没有设置 title 属性,该内容也不会为 null。

五、总结

1、开发中首选的属性一定不是 static 属性,首选的方法一定不是 static 方法。

2、static 修饰的属性和方法可以在没有实例化对象的时候直接有类名称进行调用。

3、static 属性保存在全局数据区

内存区一共有四个:栈内存、堆内存、全局数据区、全局代码区

【9】java之static关键字的更多相关文章

  1. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  2. Java的static关键字

    本文参考:Java的static关键字 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象.另一种情形是,希 ...

  3. java的static关键字 – Break易站

    本文内容来自:java的static关键字 – Break易站 (原文网站阅读体验更好) 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多 ...

  4. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  5. Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)

    Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...

  6. 面试官:兄弟,说说Java的static关键字吧

    读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...

  7. Java:static关键字小记

    Java:static关键字小记 对 Java 中的 static 关键字,做一个微不足道的小小小小记 static 修饰变量 静态变量:是被 static 修饰的变量,也称为类变量,它属于类,因此不 ...

  8. [java基础]java中static关键字

    1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ...

  9. 关于java的static关键字

    通常来说,当你创建类时,就是在描述那个类的对象的外观与行为.除非你用new创建那个类的对象,否则,你实际上并未获得任何东西.当你用new来创建对象时,数据存储空间才被分配,其方法才供外界调用. 但是有 ...

  10. java中static关键字解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

随机推荐

  1. pycharm 小技巧

    ctrl键 + B 查看定义源代码 alt键 + enter键 查看帮助 ctrl键 + shift键 + -号 所有代码隐藏 ctrl键 + shift键 + +号 所有代码展示 ctrl键 + D ...

  2. Appium工具

    1.安装 (1)jdk安装以及环境配置 a.jdk下载地址:https://www.oracle.com/cn/java/technologies/downloads/ 新建系统环境变量: b.编辑P ...

  3. virtualenv 配置(windows)

    1.在线安装 virtualenv pip install virtualenv 2.离线安装 下载virtualenv包,解压并进入setup.py所在文件夹中 python setup.py in ...

  4. vue项目 h5上拉加载(分页功能)

    <template> <div class="receivable"> <div class="application-header fle ...

  5. js 非空判断

    是否为 null 是否为 "" 是否为空字符串(引号中间有空格)  如: "     ". 制表符.换行符.换页符和回车 一. 字符串 1. if(str == ...

  6. 网络监测工具之Zabbix的搭建与测试方法(一)

    简介 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,它能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...

  7. 道长的算法笔记:Trie字典树

    Trie模板 Trie 是一种用于实现字典序快速检索的多叉树结构,Trie 每个节点都有若干的字符指针,若在扫扫描字符串时扫到字符 \(c\),则沿着当前节点 \(c\) 字符指针走向该指针指向的节点 ...

  8. HttpServletRequest获取参数和文件

    从HttpServletRequest中获取上传文件及参数的方法 try { //下面这句必须加,不然报错 MultipartResolver resolver = new CommonsMultip ...

  9. while2.c程序

    /*while2.c程序->注意分號的位置*/ 1 #include<stdio.h> 2 int main(void) 3 { 4 int n=0; 5 6 while(n++&l ...

  10. flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon'

    flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon' ...