【9】java之static关键字
一、 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关键字的更多相关文章
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- Java的static关键字
本文参考:Java的static关键字 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象.另一种情形是,希 ...
- java的static关键字 – Break易站
本文内容来自:java的static关键字 – Break易站 (原文网站阅读体验更好) 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多 ...
- Java面向对象-static关键字、静态方法与普通方法、静态成员变量
Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...
- Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)
Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...
- 面试官:兄弟,说说Java的static关键字吧
读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...
- Java:static关键字小记
Java:static关键字小记 对 Java 中的 static 关键字,做一个微不足道的小小小小记 static 修饰变量 静态变量:是被 static 修饰的变量,也称为类变量,它属于类,因此不 ...
- [java基础]java中static关键字
1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ...
- 关于java的static关键字
通常来说,当你创建类时,就是在描述那个类的对象的外观与行为.除非你用new创建那个类的对象,否则,你实际上并未获得任何东西.当你用new来创建对象时,数据存储空间才被分配,其方法才供外界调用. 但是有 ...
- java中static关键字解析
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...
随机推荐
- JavaScript:操作符:赋值运算符和空赋值(??=)
=号是赋值运算,即返回符号右边的结果,同时将结果赋值给符号左边的变量,考虑下面代码的运行结果: 赋值运算b = 1 + 1,做了两件事,先返回符号右边的结果,即2,这个2将参与a = 1 + 2的计算 ...
- 记一次在CentOS上安装GitLab的流程
1.本次环境说明 系统:Centos7.6 IP地址:http://192.168.3.213: 最低配置要求:2核心CPU和4G内存,这是因为[GitLab]的整体运行包含了多个进程 2.自行安装 ...
- [python] 个人日常python工具代码
文章目录 生成文件目录结构 多图合并 找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果.可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度.效果如下: root: ...
- Html飞机大战(十八): 模块化+项目开源
好家伙,好久好久没有更新这个系列了 为了使文档更方便阅读,使代码更容易维护,来把这个飞机大战模块化 项目已开源: https://gitee.com/tang-and-han-dynasties/ ...
- AtCoder Beginner Contest 282 G - Similar Permutation
套路题 题意 求有多少个 \(1\) 到 \(n\) 的排列满足恰有 \(k\) 对在排列中相邻的数满足前小于后 \(2 \leq n \leq 500, 0 \leq k \leq (n - 1)\ ...
- ng-alain组件st表格,实现点击表格行变色,或者渲染变色
实现点击表格行变色 html文件 <st #st [data]="data" (change)="changeClick($event)" [column ...
- SQLSERVER 的 nolock 到底是怎样的无锁?
一:背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词,即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock,但这玩意有什么注意事项呢? ...
- MySQL 合并查询union 查询出的行合并到一个表中
在合并查询中,尤其是二分类的情况,在查询结果是相同列名的时候可以考虑合并查询.先查询出行的结果,再使用union或者union all合并查询结果. 另外如果 union 和 order by 一起使 ...
- freeswitch号码黑名单
概述 freeswitch是一款简单好用的的VOIP开源软交换平台. 在客户的呼叫过程中,会遇到一些异常的号码,包括高投诉风险号码.敏感号码.特殊号码等. 在客户呼叫流程中,需要针对这些异常号码做呼叫 ...
- 【Android】移除 Android frameworks 层,当 Linux 系统使用。(服务移除篇)
前言说明 此文章仅作为技术经验记录,核心思想,就是在 init.rc 里面移除服务,致使 frameworks 不被启动,其它不便多说. 此文章内容为系统服务移除篇,最终实现的效果是 Android ...