Java学习笔记十七:Java中static使用方法
Java中static使用方法
一:Java中的static使用之静态变量;
我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
使用 static 可以修饰变量、方法和代码块。
我们先认识一下静态变量。
例如,我们在类中定义了一个 静态变量 hobby
代码如下所示:
public class HelloWorld {
//static修饰的变量为静态变量,所有的类的对象共享hobby
static String hobby ="cnblogs"; public static void main(String[]args){
//静态变量可以直接使用类名来访问,无需创建类的对象
System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
//创建类的对象
HelloWorld hello = new HelloWorld();
//使用对象名来访问静态变量
System.out.println("通过对象名访问hobby:"+hello.hobby);
//使用对象名的形式修改静态变量的值
hello.hobby="博客园";
//再次使用类名访问静态变量,值已被修改
System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
}
}
运行结果为:
注:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
二:Java中的static使用之静态方法;
与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:
public class HelloWorld {
//使用static关键字声明静态方法
public static void print(){
System.out.println("欢迎您:博客园!");
}
public static void main(String[]args){
//直接使用类名调用静态方法
HelloWorld.print(); //也可以通过对象名调用
HelloWorld demo = new HelloWorld();
demo.print();
}
}
运行结果为:
注:1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:
2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:
3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:
代码如下:
public class HelloWorld { String name = "博客园";//非静态变量name
static String hobby = "cnblogs";//静态变量hobby //普通成员方法
public void show(){ System.out.println("welcome to cnblogs"); }
//静态方法
public static void print(){
System.out.println("欢迎来到博客园");
}
public static void main(String[]args){
//普通成员方法必须通过对象来调用
HelloWorld hello = new HelloWorld();
hello.show();
//可以直接调用静态方法
print();
}
}
三:Java中的static使用之静态初始化快;
Java 中可以通过初始化块进行数据赋值。如:
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
我们来看一段代码:
public class HelloWorld { int num1;//声明变量num1
int num2;//声明变量num2
static int num3;//声明静态变量num3
public HelloWorld(){
num1 = 91;
System.out.println("通过构造方法为变量num赋值");
}
{//初始化快
num2 = 74;
System.out.println("通过初始化块为变量num2赋值"); }
static{//静态初始化快
num3 = 83;
System.out.println("通过静态初始化块为静态变量num3赋值");
}public static void main(String[]args){
HelloWorld hello = new HelloWorld();//创建类的对象hello
System.out.println("num1:"+hello.num1);
System.out.println("num2:"+hello.num2);
System.out.println("num3:"+num3);
HelloWorld hello2 = new HelloWorld();//创建类的对象hello2
}
}
运行结果为:
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
Java学习笔记十七:Java中static使用方法的更多相关文章
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java学习笔记十一:Java中的方法
Java中的方法 一:什么是方法: 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 学过C语言或者其他语言的应该都知道函数这个东西,在Java中,其实方法就是函数,只不过叫法不同,在 ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- java 学习笔记1 java语言概述及开发环境
高级语言运行机制 高级语言按程序的执行方式分为编译型和解释型两种. java语言比较特殊,Java程序的执行必须经过先编译后解释的步骤. 1 编译生成字节码,只面向JVM(.class) 2Jvm执行 ...
- JAVA学习笔记之JAVA 对象引用以及赋值
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没 ...
- Java学习笔记十:Java的数组以及操作数组
Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...
- 8.4(Java学习笔记)java脚本引擎(Rhino)
一.java脚本引擎 java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言. 二.脚本引擎执行脚本代码 ScriptEngineManager:为Sc ...
- Java学习笔记(6)---正则表达式,方法
1.正则表达式: a.定义: 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 在Java,一个字符串其实就是一 ...
- Java 学习笔记(4)——java 常见类
上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...
随机推荐
- QT的键值对应关系 看完开发节省时间 哈哈
http://blog.csdn.net/wangjieest/article/details/8283656
- Angular开启两个项目方法
Angular开启两个项目方法: ng server --port 80
- webpack学习(五)配置详解
配置详解 //使用插件html-webpack-plugin打包合并html //使用插件extract-text-webpack-plugin打包独立的css //使用UglifyJsPlugin压 ...
- ubuntu 杀死进程命令
如果是查看本机所有的进行的进程: ps aux # 用ps -A查看所有进程 杀死进程: kill -9 PID # PID是进程号,查看进程时会显示
- 由memcpy内存越界引发的问题 && delete 和 delete []的真正区别
今天遇到了一个问题,在程序运行到某处总会报访问到错误的地址的错误,而且每次报错的堆栈还都不一样,排查了一段时间,发现是memcpy这里出了错 ]; memset(d, , data.size() * ...
- servlet api.jar是干什么的?
支持servlet的jar包.应该叫servlet-api.jar你如果编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是 ...
- 【JQ】鼠标经过一组button,弹出各自的气泡图片
HTML <div id="bubble1" class="bubble"><img src="../image/p_bubble1 ...
- PHP----练习-----新闻管理----增删改查
练习-----新闻管理 题目要求如下: 做法: [1]建数据库 [2]封装类文件--------DBDA.class.php <?php class DBDA { public $fuwuqi= ...
- sublime text 插件及快捷键的使用
安装插件准备步骤: 1.先安装管理插件,插件必备:package control 1.按ctrl+` 调出console 2.在底部代码行粘贴以下代码并回车: import urllib2,os;pf ...
- C# 密封类sealed
1.密封类定义 如果我们不希望自己编写的类被继承:如果有的类已经没有再被继承的必要,这时,我们可以使用sealed修饰符在类中进行声明,以达到该类不能派生其它类的目的,该类就被称为密封类. 2.密封类 ...