03-13_static关键字
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关键字的更多相关文章
- 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封装 ...
- Docs-.NET-C#-指南-语言参考-关键字:C# 关键字
ylbtech-Docs-.NET-C#-指南-语言参考-关键字:C# 关键字 1.返回顶部 1. C# 关键字 2017/03/07 关键字是预定义的保留标识符,对编译器有特殊意义. 除非前面有 @ ...
- C#语言和数据库基础
第一章 第一个C#程序 Vs2012密钥 RBCXF-CVBGR-382MK-DFHJ4-C69G8 01..net和C#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标 ...
- S2---深入.NET平台和C#编程的完美总结
1.NET简单解说 l 面向对象提升 OOP(Object Oriented Programming)面向对象编程 AOP:(Aspache Oriented Programming):面向切面编 ...
- 20160129.CCPP体系详解(0008天)
程序片段(01):函数.c+call.c+测试.cpp 内容概要:函数 ///函数.c #include <stdio.h> #include <stdlib.h> //01. ...
- 20160126.CCPP体系详解(0005天)
程序片段(01):eatmem.c 内容概要:语句和逻辑结构 #include <stdio.h> #include <stdlib.h> #include <Windo ...
- JavaSE_ 面向对象 总目录(7~10)
JavaSE学习总结第07天_面向对象2 07.01 成员变量和局部变量的区别07.02 方法的形式参数是类名的调用07.03 匿名对象的概述和应用07.04 封装的概述07.05 封装的好处和设计原 ...
- JavaSE学习总结第09天_面向对象4
09.01 final关键字引入 例: class Fu { public final void show() { System.out.println("访问底层资源"); ...
- SQL注入的优化和绕过
作者:Arizona 原文来自:https://bbs.ichunqiu.com/thread-43169-1-1.html 0×00 ~ 介绍 SQL注入毫无疑问是最危险的Web漏洞之一,因为我们将 ...
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
随机推荐
- 打印慢sql的日志
- Day25--Python--re,模块(regular expression)
一 . re 1. import re findall() 查找所有结果 finditer() 查找到的结果返回迭代器 search() 查找. 如果查找到第一个结果,就停止. 如果查找不到结果,返回 ...
- host访问goole
https://laod.cn/hosts/2016-google-hosts.html http://whosmall.com/?post=148
- python 中r 和 \r
r'xxx' 转义 如果在前面加r字符,则表示让这个字符串里面的内容失去转义的意义 1 s = r'\n这只是\n' # 字符串中的"\n"只是字符,没有换行的意义了. 2 pri ...
- glob.glob 匹配文件
glob.glob以列表形式返回匹配的文件路径 只有一个参数:文件的匹配规则 e.g. >>>res_home = '/vip_data_center/test_envs/train ...
- mysql中CONCAT值为空的问题解决办法
在mysql中concat函数有一个特点就是有一个值为null那么不管第二个字符有多少内容都返回为空了,这个特性让我们在实例应用中可能觉得不方便,但实现就是这样我们需要使用其它办法来解决. 天在做op ...
- STM32 ------ 串口 数据位长度 和 奇偶校验位
USART_InitStructure.USART_WordLength 的值是数据位长度+一个奇偶校验位(如果无奇偶校验则不加一)
- 构造方法中关键字-- super
package lijun.cn.demo4; public class Person { int num =777; public Person(){ System.out.println(&quo ...
- Nginx入门篇-基础知识与linux下安装操作
我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...
- 基础教程:Mac 电脑小白应该了解哪些东西?
文章素材来源:知乎 文章收录于:风云社区(www.scoee.com),提供1700多款mac软件下载. 本文提供给那些从 PC 阵营初入 Mac 的同学而准备的,我们希望从硬件和软件.设计风格和使用 ...