static主要作用

  • 常见定义结构:public static void main();

  • static关键字可以用于定义属性及方法;

static定义属性

在一个类之中,主要的组成就是属性和方法(分为构造方法与普通方法两种),而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存之中)

如果现在类中的某个属性希望定义为公共属性(所有对象都可以使用的属性)则可以在声明属性前加上static关键字。

范例:定义程序

class Book {	// 描述的是同一个出版社的信息
private String title ; // 普通属性
private double price ; // 普通属性
static String pub = "清华大学出版社" ; // 定义一个描述出版社信息的属性,为操作方便,暂不封装
public Book(String title,double price) {
this.title = title ;
this.price = price ;
}
public String getInfo() {
return "图书名称:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub ;
}
}
public class TestDemo {
public static void main(String args[]) {
Book ba = new Book("Java开发",10.2) ; // 实例化Book类对象
Book bb = new Book("Android开发",11.2) ; // 实例化Book类对象
Book bc = new Book("Oracle开发",12.2) ; // 实例化Book类对象
ba.pub = "北京大学出版社" ; // 修改了一个属性的内容
System.out.println(ba.getInfo()) ;
System.out.println(bb.getInfo()) ;
System.out.println(bc.getInfo()) ;
}
}
程序执行结果:
图书名称:Java开发,价格:10.2,出版社:北京大学出版社
图书名称:Android开发,价格:11.2,出版社:北京大学出版社
图书名称:Oracle开发,价格:12.2,出版社:北京大学出版社

static属性保存

static是一个公共属性的概念,那么如果只是简单的由一个对象去修改static属性的做法很不合适,那么最好的做法是由所有对象的公共的代表来进行访问,那么就是类,所以来讲利用static定义的属性是可以由类名称直接调用的。

Book.pub = "北京大学出版社" ;

范例:在没有实例化对象产生时直接操作static属性

public class TestDemo {
public static void main(String args[]) {
System.out.println(Book.pub) ; // 在没有实例化对象的情况下直接输出属性内容
Book.pub = "北京大学出版社" ; // 修改static属性内容
Book ba = new Book("Java开发",10.9) ; // 实例化Book类对象
System.out.println(ba.getInfo()) ; // 输出Book类对象信息
}
}
程序执行结果:
清华大学出版社
图书名称:Java开发,价格:10.9,出版社:北京大学出版社

static定义方法

在定义类的普通方法时也可以使用static进行定义,那么很明显,使用static定义的方法也可以在没有实例化对象产生的情况下由类名称直接进行调用。

范例:使用static定义方法

class Book {		// 描述的是同一个出版社的信息
private String title ;
private double price ;
private static String pub = "清华大学出版社" // 定义一个描述出版社信息的属性
public Book(String title,double price) {
this.title = title ;
this.price = price ;
}
public static void setPub(String p) { // 定义static方法可以由类名称直接调用
pub = p ;
}
public String getInfo() {
return "图书名称:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub ;
}
}
public class TestDemo {
public static void main(String args[]) {
Book.setPub("北京大学出版社") ; // 在没有对象产生的时候进行调用
Book ba = new Book("Java开发",10.2) ; // 实例化Book类对象
Book bb = new Book("Android开发",11.2) ;// 实例化Book类对象
Book bc = new Book("Oracle开发",12.2) ;// 实例化Book类对象
System.out.println(ba.getInfo()) ;
System.out.println(bb.getInfo()) ;
System.out.println(bc.getInfo()) ;
}
}
程序执行结果:
图书名称:Java开发,价格:10.2,出版社:北京大学出版社
图书名称:Android开发,价格:11.2,出版社:北京大学出版社
图书名称:Oracle开发,价格:12.2,出版社:北京大学出版社

范例:使用static定义方法

class Book {		// 描述的是同一个出版社的信息
private String title ;
private double price ;
private static String pub = "清华大学出版社" // 定义一个描述出版社信息的属性
public Book(String title,double price) {
this.title = title ;
this.price = price ;
}
public static void setPub(String p) { // 定义static方法可以由类名称直接调用
pub = p ;
}
public String getInfo() {
return "图书名称:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub ;
}
}
public class TestDemo {
public static void main(String args[]) {
Book.setPub("北京大学出版社") ; // 在没有对象产生的时候进行调用
Book ba = new Book("Java开发",10.2) ; // 实例化Book类对象
Book bb = new Book("Android开发",11.2) ;// 实例化Book类对象
Book bc = new Book("Oracle开发",12.2) ;// 实例化Book类对象
System.out.println(ba.getInfo()) ;
System.out.println(bb.getInfo()) ;
System.out.println(bc.getInfo()) ;
}
}
程序执行结果:
图书名称:Java开发,价格:10.2,出版社:北京大学出版社
图书名称:Android开发,价格:11.2,出版社:北京大学出版社
图书名称:Oracle开发,价格:12.2,出版社:北京大学出版社

static方法限制

类中的方法有两组:

  • static方法
  • 非static方法

这两组件方法间访问也将受到限制:

  • static方法不能够直接访问非static属性或者是方法,只能够调用static属性或方法;
  • 非static方法可以访问static的属性或者是方法,不受任何的限制;

主方法

Java语言最大的特点可能就在于主方法上了,因为在Java中的主方法的组成单元许多,下面来观察一下每一个组成单元的含义:

  • public:主方法是程序的开始,所以这个方法对任何的操作都一定是可见的,那么既然是可见的就必须使用public(公共)。
  • static:证明此方法是由类名称调用的;
  • void:主方法是一切的执行的开始点,既然是所有的开头,那么就不能够回头,执行完毕为止;
  • main:是一个系统规定好的方法名称,不能够修改;
  • String args[]:指的程序运行的时候传递的参数,格式为:“java 类名称 参数 参数 参数”;

功能一:实现类实例化对象个数的统计

class Book {
private static int num = 0; // 保存统计个数
public Book() { // 只要是新对象实例化就执行此构造
num++; // 保存个数自增
System.out.println("这是第" + num + "个产生的对象!");
}
}
public class TestDemo {
public static void main(String args[]) {
new Book(); new Book(); new Book();
new Book(); new Book(); new Book();
}
} 程序执行结果:
这是第1个产生的对象!
这是第2个产生的对象!
这是第3个产生的对象!
这是第4个产生的对象!
这是第5个产生的对象!
这是第6个产生的对象!

功能二:实现属性的自动设置

class Book {
private String title ; // title属性
private static int num = 0 ; // 自动命名索引号
public Book() { // 没有设置title属性内容
this("NOTITLE - " + num ++) ; // 自动命名
}
public Book(String title){ // 设置title属性内容
this.title = title ;
}
public String getTitle() {
return this.title ;
}
}
public class TestDemo {
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()) ;
}
}
程序执行结果:
Java
NOTITLE - 0
NOTITLE - 1

03-13_static关键字的更多相关文章

  1. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  2. Docs-.NET-C#-指南-语言参考-关键字:C# 关键字

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字:C# 关键字 1.返回顶部 1. C# 关键字 2017/03/07 关键字是预定义的保留标识符,对编译器有特殊意义. 除非前面有 @ ...

  3. C#语言和数据库基础

    第一章 第一个C#程序 Vs2012密钥 RBCXF-CVBGR-382MK-DFHJ4-C69G8 01..net和C#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标 ...

  4. S2---深入.NET平台和C#编程的完美总结

    1.NET简单解说 l 面向对象提升 OOP(Object Oriented  Programming)面向对象编程 AOP:(Aspache  Oriented Programming):面向切面编 ...

  5. 20160129.CCPP体系详解(0008天)

    程序片段(01):函数.c+call.c+测试.cpp 内容概要:函数 ///函数.c #include <stdio.h> #include <stdlib.h> //01. ...

  6. 20160126.CCPP体系详解(0005天)

    程序片段(01):eatmem.c 内容概要:语句和逻辑结构 #include <stdio.h> #include <stdlib.h> #include <Windo ...

  7. JavaSE_ 面向对象 总目录(7~10)

    JavaSE学习总结第07天_面向对象2 07.01 成员变量和局部变量的区别07.02 方法的形式参数是类名的调用07.03 匿名对象的概述和应用07.04 封装的概述07.05 封装的好处和设计原 ...

  8. JavaSE学习总结第09天_面向对象4

      09.01 final关键字引入 例: class Fu { public final void show() { System.out.println("访问底层资源"); ...

  9. SQL注入的优化和绕过

    作者:Arizona 原文来自:https://bbs.ichunqiu.com/thread-43169-1-1.html 0×00 ~ 介绍 SQL注入毫无疑问是最危险的Web漏洞之一,因为我们将 ...

  10. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

随机推荐

  1. 【LOJ6284】数列分块8

    题目大意:维护一个序列,支持区间染色,查询区间中等于某个颜色的点的个数. 题解:考虑直接用线段树进行维护,维护区间相同颜色值和一个区间颜色是否相同的标记即可. 代码如下 #include <bi ...

  2. 【CF1141F2】Same Sum Blocks

    题解:发现可以通过枚举区间将区间和相同的元组记录在一个表中,对于答案来说,在同一个表中的元组的选择才会对答案产生贡献.发现每一个表中都是一个个区间,问题转化成了对于每一个表来说,选择若干个不相交的区间 ...

  3. 第八节、图片分割之GrabCut算法、分水岭算法

    所谓图像分割指的是根据灰度.颜色.纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性.我们先对目前主要的图像分割方法做个概述,后面再 ...

  4. 计算机基础:计算机网络-chapter3

    数据链路层,给两个相邻节点传输数据. 数据链路:物理链路+通信协议. 数据链路层使用的信道主要有点对点信道和广播信道两种. 一.点对点信道的PPP协议: 用三层模型来研究数据链路层,不管在哪一链路上的 ...

  5. 关键字(7):属性的增删改add,drop,modify

    新建一张表: ));   注意:新建表时,表里面至少要有一个字段   删除整张表: drop table nac_user.a_bt;   增加表的一个属性:  ) default('M') 新增外键 ...

  6. qml: QtChart横纵轴label设置;

    在qml中,使用ChartView作为图表展示区域, 但是并没有给定接口用来设置xlabel,ylabel. 没得办法,只能采用笨方案: (我的方法如下) import QtQuick 2.0 imp ...

  7. 如何在Mac上安全彻底的卸载软件?

    文章来源:知乎 收录于:风云社区(SCOEE)[提供mac软件下载] 更多专题,可关注小编[磨人的小妖精],查看我的文章,也可上[风云社区 SCOEE],查找和下载相关软件资源. (一)综合类: 新买 ...

  8. JavaSE_List&Array_Java1.7

    这里简单写了下List和Array的相互转换 package cn.rocker.collection.list; import org.junit.Test; import java.util.Ar ...

  9. JDK记录-JVM原理与调优(转载)

    转载自<https://www.cnblogs.com/andy-zhou/p/5327288.html> 一.什么是JVM JVM是Java Virtual Machine(Java虚拟 ...

  10. golang命令行参数

    os.Args获取命令行参数 os.Args是一个srting的切片,用来存储所有的命令行参数 package main import ( "fmt" "os" ...