一、 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. ES6——模块化

    模块化 模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来. 一.浏览器使用ES6模块化方式一 使用script标签,将type属性设置为module,然后在script中书写代码 ...

  2. python之元组(tuple)知识点

    元组与列表都是容器,两个的区别在于: 1.元组使用的是小括号,列表使用的是方括号 2.元组一旦定义不可修改,而列表是可以随意变更 创建元组 元组的创建与列表大同小异,逗号在元组中充当了元组的灵魂,创建 ...

  3. TiDB 底层存储结构 LSM 树原理介绍

    作者:京东物流 刘家存 随着数据量的增大,传统关系型数据库越来越不能满足对于海量数据存储的需求.对于分布式关系型数据库,我们了解其底层存储结构是非常重要的.本文将介绍下分布式关系型数据库 TiDB 所 ...

  4. [C++标准模板库:自修教程与参考手册]关于auto_ptr

    什么是auto_ptr指针 auto_ptr是这样一种指针:它是"它所指的对象"的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要 ...

  5. Entrypoint undefined = index.html html-webpack-plugin 错误ERROR in Error: Child compilation failed: Module build failed (from ./node_modules/html-webpack-plu SyntaxError: Unexpected token )

    Entrypoint undefined = index.html html-webpack-plugin 错误 ERROR in Error: Child compilation failed: M ...

  6. java入门与进阶P-4.7

    最大公约数 首先做这个题需要先复习几组概念: 如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数.几个整数中公有的约数,叫做这几个数的公约数:其中最大的一个,叫做这几个数的最大公约数.举例: 1 ...

  7. Object类的toString方法-Object类的equas方法

    Object类的toString方法 Object 是类层次结构的根(最顶层)类.每个类都是用 Object 作为超(父)类. 所有对象(包括数组) 都实现这个类的方法 Person类默认继承了Obj ...

  8. QtCharts模块勾画折线和曲线图

    QtCharts画线图主要三个部分组成 QLIneSeries或QSplineSeries用于保存联系的坐标位置数据,QChart用于管理图像显示,例如图例,坐标主题等,QChartView则用于显示 ...

  9. MRS_MounRiver安装与驱动相关问题汇总

    解决问题如下: MounRiver下载与安装 若MounRiver某些功能不全或插件没安装 MounRiver下载与安装 MRS官网下载:http://www.mounriver.com/downlo ...

  10. 为什么 TCP 建立连接需要三次握手(转载)

    为什么 TCP 建立连接需要三次握手(转载) 原文链接:https://draveness.me/whys-the-design-tcp-three-way-handshake/ TCP 协议是我们几 ...