这次我们来学习静态(static)

知识点

1.静态方法只能调用静态变量

2.静态变量属于整个Class,会随着发生变化。

案例:定义一个自动增长的学生类。

题目要求

定义一个学生类,除了姓名、性别、学历层次。

还有自动增长的学号,本科以A开头,专科以B开头。  编号从100开始,如A0103。

方法思路

1.定义学生属性,姓名name  性别sex   学历层次level   学号 studentNo

2. 学号增长函数(解决自动增长问题)

3.测试

程序代码

Student(学生类)

 public class Student {
public static final byte MALE = 0;
public static final byte FEMALE = 1;
public static final byte UNDERGRATUATION = 1;
public static final byte SPECIAL = 0; private static int noA ;//本科计数器
private static int noB ;//专科计数器 private String name;
private byte sex;
private byte level;
private String sno;
// 静态代码块,实现自动增长。
static {
noA = 0;
noB = 0;
} /**
* 构造函数,构造学生信息。 并且自动生成学号
* @param name 姓名
* @param sex 性别
* @param level 学历
*/
public Student(String name, byte sex, byte level) {
this.name = name;
this.sex = sex;
this.level = level; //自动生成学号
if (UNDERGRATUATION == level){
this.sno = String.format("A%04d",++noA); // String,format 格式化输出
}else {
this.sno = String.format("B%04d",++noB);
}
} /**
* 输出函数,输出学生的所有信息。
*/
public void print(){
System.out.println("学号:"+sno);
System.out.println("姓名:"+name);
System.out.println("性别:"+(sex==MALE?"男":"女"));
System.out.println("学历:"+(level==UNDERGRATUATION?"本科":"专科"));
System.out.println();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex == MALE?"男":"女";
} public void setSex(byte sex) {
this.sex = sex;
} public byte getLevel() {
return level;
} public void setLevel(byte level) {
this.level = level;
} public String getStuNo() {
return sno;
} public void setStuNo(String stuNo) {
this.sno = stuNo;
} /**
* 计算某种学历的总人数
* @param level 学历(本科 专科)
* @return 某种学历的注册总人数
*/
public static int getCount(byte level){
return UNDERGRATUATION==level?noA:noB;
}
}

Test(测试)类

 public class Test {
public static void main(String[] args) {
Student stu1 = new Student("小明",Student.MALE,Student.UNDERGRATUATION); // 小明 男 本科
Student stu2 = new Student("小红",Student.FEMALE,Student.SPECIAL); // 小红 女 专科
Student stu3 = new Student("小张",Student.MALE,Student.SPECIAL);
Student stu4 = new Student("小王",Student.MALE,Student.SPECIAL); stu1.print();
stu2.print();
stu3.print();
stu4.print(); int n1 = Student.getCount(Student.UNDERGRATUATION);
int n2 = Student.getCount(Student.SPECIAL);
System.out.printf("已经注册了%d个本科生,%d专科生",n1,n2);
System.out.println();
}
}

运行结果

心得体会

这是4个类型的使用权限。

静态 static 是属于整个class的,会随着函数的运算发生改变,而局部变量调用函数,在函数内发生了变化,然而本身并没有变化。

这个有点像   String 和 StringBuffer 。       stringBuffer也是全局改变的。

举例:

主函数中代码如下所示

    int num = 5;
add(5);
System.out.println(num);

add函数

public static void add (int num){
++num;
System.out.println(num);
}

运行结果:

java学习-初级入门-面向对象⑥-类与对象-静态static的更多相关文章

  1. java学习-初级入门-面向对象⑤-类与对象-类与对象的定义和使用3

    这次我们要做一个日期类Date类 主要目的是    1.  熟悉-->构造不同参数的函数  2.善于利用已有的函数!! 题目要求: Date类要求 可设定年月日 可转换为字符串,并可指定分隔符, ...

  2. java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2

    我们继续学习类与对象,上一篇我们定义了  坐标类(Point), 这次我们在Point的基础上,创建一个圆类(Circle). 案例:创建一个圆类 题目要求: 计算圆的周长和面积:求判断两个圆的位置关 ...

  3. java学习-初级入门-面向对象③-类与对象-类与对象的定义和使用1

    今天学习类与对象.先大致解释一下类与对象的含义. 对象:object 有物体这一概念,一切皆对象(物体),对象由静态的属性和动态的行为组成. 比如说水杯: 水杯的静态属性:材质,容量,质量,颜色 动态 ...

  4. java学习-初级入门-面向对象①-面向对象概述-结构化程序设计

    为了学习面向对象程序设计,今天我们先利用面向对象以前的知识,设计一个学生类. 要求进行结构化程序设计. 学生类: Student 要求:存储学生的基本信息(姓名.性别.学历层次和年级),实现学生信息的 ...

  5. java学习-初级入门-面向对象②-面向对象概述-面向对象程序设计

    我们在  面向对象①中学习了,结构化程序设计. 今天我们一起学习面向对象程序设计. 学习面向对象程序设计就要了解,在面向对象中重要的知识点. 继承  .  多态   . 抽象  . 接口 我们会在接下 ...

  6. delphi高手突破学习笔记之面向对象类和对象的本质

    知识点1:堆和栈 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack). 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的.例如,用GetMem函数获取了一 ...

  7. delphi高手突破学习笔记之面向对象类和对象的本质(有汇编解释 good)

    知识点1:堆和栈 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack). 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的.例如,用GetMem函数获取了一 ...

  8. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  9. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

随机推荐

  1. 爬虫,工具 - Splash

    What is it? Splash is a javascript rendering service. It's a lightweight web browser with an HTTP AP ...

  2. Fluent_Python_Part2数据结构,04-text-byte,文本和字节序列

    文本和字节序列 人使用文本,计算机使用字节序列 1. 大纲: 字符.码位和字节表述 bytes.bytearray和memoryview等二进制序列的独特特性 全部Unicode和陈旧字符集的编解码器 ...

  3. Python os模块、os.path模块常用方法

    os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep 可以取代操作系统特定的路径分隔符.windows下为 "\" o ...

  4. web.xml中的welcome-file-list标签作用

    welcome-file-list是一个配置在web.xml中的一个欢迎页,用于当用户在url中输入项目名称或者输入web容器url(如http://localhost:8080/)时直接跳转的页面. ...

  5. Latin-1字符集

    ISO Latin-1字符集是Unicode字符集的一个子集,对应于IE4+中Unicode字符指令表的前256个条目.下面表格中详细提供了每个字符及字符的十进制编码和HTML已命名实体.其中Unic ...

  6. 深度学习之父低调开源 CapsNet,欲取代 CNN

    “卷积神经网络(CNN)的时代已经过去了!” ——Geoffrey Hinton 酝酿许久,深度学习之父Geoffrey Hinton在10月份发表了备受瞩目的Capsule Networks(Cap ...

  7. 高级T-SQL进阶系列 (二)【上篇】:使用 APPLY操作符

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 伴随着SQL SERVER 2005的发布,微软增加了一个新的操作符,它允许你将一个记录集与一个函数进行关联,然 ...

  8. 【译】索引进阶(十七): SQL SERVER索引最佳实践

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 在本章我们给出一些建议:贯穿本系列我们提取出了十四条基本指南,这些基本的指南将会帮助你为你的数据库创建最佳的索引 ...

  9. centos 下安装nginx

    安装make: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc gcc-c++ cd /usr/loc ...

  10. Linux - kali Linux重置密码

    1. recovery mode -> E 2. ro -> rw 3. plus init=/bin/bash 4. passwd root