【Java基础】static关键字相关
static关键字特点:
- 随着类的加载而加载。
- 优先于对象存在。
- 被所有对象共享
- 可以直接被类名调用。
使用注意:
- 静态方法只能访问静态成员。
- 但非静态成员可以访问静态成员。
- 静态方法中不能使用this,super关键字。
- 主方法(main)是静态的。
看了上面是不是想睡觉了,单纯的概念是挺烦人的,那下面让我们在实际代码中来加深对他们的认知。
方法的调用可以分为两种:
- 对象调用: 对象.方法(实参)
- 类调用: 这个方法所在类的名字.方法(实参)//前提是这个方法必须被static修饰。
没有使用static修饰的方法或字段,属于对象。为实例成员。
使用static修饰的方法或字段,属于类。为类成员。
对他们的调用:
若是实例成员:只能通过对象来调用。
若是类成员:可以通过类名调用,也可以通过对象来调用。
好吧,下面小程序来了。
class dog//一群狗狗
{
String name;
int age;//没有使用static修饰,属于对象,为实例成员。
//狗的名字,年龄,每只狗都不同,能随意变。 static int num=100;//使用static修饰,属于类,为类成员。
//而狗的总数是不变的。
} class day5lesson2
{
public static void main(String[] args)
{
System.out.println("通过类名来调用类成员-->"+dog.num);//编译通过
//System.out.println("通过类名来调用实例成员-->"+dog.name);//编译不通过
System.out.println("通过对象来调用类成员-->"+new dog().num);//运行通过
System.out.println("通过对象来调用实例成员-->"+new dog().name);//运行通过
}
}
上面代码中被注释掉的不能通过的代码的错题提示如下:
上面程序也说明了上面提到的:若是实例成员:只能通过对象来调用。若是类成员:可以通过类名调用,也可以通过对象来调用。但是在调用类成员时建议用类名来调用,因为在底层,对象来调用类成员,也会转换为类名调用。
下面必须提到的是:静态区域。它是在JVM内存中的一块专门存储类成员的存储区域。
我们修改一下上面一段程序的主方法:
class dog//一群狗狗
{
String name;
int age;//没有使用static修饰,属于对象,为实例成员。
//狗的名字,年龄,每只狗都不同,能随意变。 static int num=100;//使用static修饰,属于类,为类成员。
//而狗的总数是不变的。
}
class day5lesson2
{
public static void main(String[] args)
{
dog d1=new dog();
dog d2=new dog();//声明2个对象 d1.num=111;//用d1修改类成员。
System.out.println("d1.num="+d1.num);
System.out.println("d2.num="+d2.num);//输出 d1.age=111;//用d1修改实例成员。
System.out.println("d1.age="+d1.age);
System.out.println("d2.age="+d2.age);//输出
}
}
结果如下:
为什么是这种结果呢?这就是static修饰的字段属于类成员,存储在专门的静态区域中。(PS:在类加载时就为其创建空间,所以比较消耗性能)。一般static方法用在做工具类的方法的时候,如Arrays类(java.util.Arrays)中,大量使用static方法,可在JDK API中查看。
而没被static修饰的age(实例成员)则不会有这种效果。(PS:int定义一个数字默认值为0,所以d2.age输出0)
【Java基础】static关键字相关的更多相关文章
- java基础—static关键字
一.static关键字
- Java基础--static关键字
不管是平时阅读源代码,还是笔试.面试中,static关键字还是经常被问道,这篇文章主要来重新复习一下该关键字. 一.static用途 static方便在没有创建对象的时候调用方法或者变量. stati ...
- java基础--static关键字的使用
一.static关键字的作用 使类成员完全独立于该类的任何对象.通常情况下,类成员必须通过它的类的对象访问,但是被static修饰的成员,能够被自己访问,而不必引用特定的实例. 一旦一个成员被声明为s ...
- Java基础-synchronized关键字的用法(转载)
synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...
- 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 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...
随机推荐
- openssl 对称加密算法enc命令详解
1.对称加密算法概述 openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用. openss ...
- HTML5-常见的事件- contextmenu 事件
主要控制应该何时显示上下文菜单,以便开发人员取消默认的上下文菜单而提供自定义的菜单 <1> 由于该事件是冒泡的,因此可以为document 指定一个事件处理程序,用以处理页面中发生的所有此 ...
- uva 1597 Searching the Web
The word "search engine" may not be strange to you. Generally speaking, a search engine se ...
- UVA11361 Investigating Div-Sum Property(数位dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 题目意思:问在区间[A,B]有多少个数不仅满足自身是k的倍数,而且其各个位数上的和 ...
- add monitor resolution
cvt 1920 1080 # Get the correct settings for the new mode # Output for me: "1920x1080_60.00&quo ...
- 反引号backtick中输入多个命令
如果在反引号backtick中输入多个命令会怎样?比如有如下脚本: #!/bin/bash var=`date;who` echo $var 运行该脚本,会发现输出的是命令date和who的集合,只是 ...
- 轻量jquery框架之--组件交互基础设计
概要 组件交互基础,即考虑在JQUERY对象下($)下扩展所有组件都需要用到的通用api,如ajax入口.对表单的操作.html片段加载.通用的配合datagrid通用的curd客户端对象等. 扩展a ...
- Linux 下配置 SoftEther Client
我经常使用的代理有 SSH, GoAgent, FreeGate, VPN, HttpProxy 等等,不过 SoftEther 应该是我用过的最快.最稳定的 VPN 协议. Windows 下配置 ...
- PAT 1059. Prime Factors (25) 质因子分解
题目链接 http://www.patest.cn/contests/pat-a-practise/1059 Given any positive integer N, you are suppose ...
- HDU 4939 Stupid Tower Defense
dp:枚举red,dp前i 个塔中有j 个蓝塔的最大伤害. 机智的地方:dp前i 个塔的时候可以同时处理n-i 个红塔,这样就少了个循环...(枚举红塔的循环) #include <iostre ...