JavaSE入门学习12: Java面相对象之static使用方法
我们能够基于一个类创建多个该类的对象,每一个对象都拥有自己的成员,互相独立。
然而在某些时候,我们更希
望该类全部的对象共享同一个成员。
此时就是static大显身手的时候了。
Java中被static修饰符修饰的成员称为静态成员或类成员。它属于整个类全部,而不是某个对象全部,即被类的所
有对象所共享。静态成员能够使用类名直接訪问。也能够使用对象名进行訪问。
当然,鉴于他作用的特殊性更推荐用
类名訪问。
使用static修饰符能够修饰变量、方法和代码块。
一Java中的static使用方法之静态变量
我们将static修饰符修饰的变量称之为静态变量或者类变量,全部的类的对象都共享静态变量。我们能够使用类名
直接去訪问静态变量,也能够使用类的实例对象去訪问静态变量。
比如,我们在类中定义了一个 静态变量 hobby ,操作代码例如以下所看到的:
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
使用静态变量要注意的事项有:
A静态成员属于整个类,当系统第一次使用该类时。就会为其分配内存空间直到该类被卸载才会进行资源回收。
B静态成员变量是属于整个类的全局变量,它不单属于某一个对象;普通成员变量是属于类中的对象,它不能被
所有对象共享。
C静态成员变量必须在全局进行定义,而因为普通成员变量在创建一个对象的时候能够对它进行初始化,因此就
不需要单独对它进行定义,仅仅要声明就可以。
D静态成员变量在没有对象之前就存在。
二Java中的static使用方法之静态方法
与静态变量一样。我们也能够使用static修饰符去修饰方法,称为静态方法或类方法。事实上之前我们一直写的main
方法就是静态方法。
静态方法的使用如:
执行结果:
使用静态方法须要注意的事项有:
A静态方法中能够直接调用同类中的静态成员。但不能直接调用非静态成员。如:
B在静态方法中调用非静态变量,能够通过创建类的对象,然后通过对象来訪问非静态变量。如:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
C在普通成员方法中,则能够直接訪问同类的非静态变量和静态变量,例如以下所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
D静态方法中不能直接调用非静态方法,须要通过对象来訪问非静态方法。
如:
三Java中的static使用方法之静态初始化块
Java中能够通过初始化块进行数据赋值。
如:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在类的声明中。能够包括多个初始化块,当创建类的实例时。就会依次运行这些代码块。假设使用static修饰符去
修饰初始化块,就称为静态初始化块。
使用静态初始化块须要注意的事项有:
静态初始化块仅仅在类载入时运行,且仅仅会运行一次,同一时候静态初始化块仅仅能给静态变量赋值,不
能初始化普通的成员变量。
我们来看一段代码:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
通过输出结果,我们能够看到,程序运行时静态初始化块最先被运行,然后运行普通初始化块,最后才运行构造
方法。
因为静态初始化块仅仅在类载入时运行一次。所以当再次创建对象 hello2 时并未运行静态初始化块。
我们再来看一个实例:
public class Test { String name; //声明变量name
String sex; //声明变量sex
static int age;//声明静态变量age // 构造方法
public Test() {
System.out.println("通过构造方法初始化name");
name = "tom";
} // 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男";
} // 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
} public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
} public static void main(String[] args) { // 创建对象
Test test = new Test();
// 调用对象的show方法
test.show(); }
}
执行结果:
JavaSE入门学习12: Java面相对象之static使用方法的更多相关文章
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- JavaSE入门学习24:Java面向对象补充
一Java中的Object类 Object类是全部Java类的父类.假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认 继承Object类. public class ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
- Java开发知识之Java面相对象
Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...
- JavaSE入门学习17:Java面向对象之package(包)
一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ...
- JavaSE入门学习20:Java面向对象之接口(interface)(一)
一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...
- JavaSE入门学习18:Java面向对象之多态
一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...
- msp430入门学习12
msp430的定时器--Timer_A(定时器A) msp430入门学习
随机推荐
- DIV自动居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 详谈Struts+Hibernate+Spring三大框架
前言:对于JAVA WEB端的程序员来说,对JAVA三大框架:Struts+Hibernate+Spring的了解必不可缺,下面详细谈谈 Java三大框架主要用来做WEN应用. 三大框架:Struts ...
- MFC_2.10选项卡控件的封装
选项卡控件的封装 1.新建默认MFC项目 2.添加资源Dialog,属性style改child,边框改none,添加类取名CMyDialog1: 同理,CMyDialog2: 3.类向导,添加MFC类 ...
- java_IO_3
Reader和Writer针对字符文件 对图片类文件可能就显得无能为力了 会损坏文件 package ioStudy; import java.io.File; import java.io.Fi ...
- A3. JVM 类加载器
[概述] 虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码 ...
- 一个简单的java年龄计算器
制作一个如下图年龄计算器 根据题目,我做了一个由Calendar类以及年月日各相减得到的年龄,当然正确的方法不止一个,以下为我的源代码和结果截图: package com.Date; import j ...
- CUDA 动态编译(NVRTC)简记
在linux上用sublime text 3上写完CUDA代码和c++代码后,想用code::blocks去一并编译,就像visual studio那样一键编译运行,但发现在code::blocks上 ...
- Linux 下 Bash 脚本对拍
背会... #!/bin/bash i= while true ;do ./maker > data.in ./a <data.in> data.out ./b <data.i ...
- localStorage前端存储数据
<!DOCTYPE html> <html> <head> <title>localStorage演示</title> <meta c ...
- TestNG套件测试(一)
测试套件是用于测试软件程序的行为或一组行为的测试用例集合. 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,可以灵活配置要运行的测试. 套件用<suite&g ...