这次我们来学习静态(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. jmh 微基准测试

    选择依据:对某段代码的性能测试. 1.运行方法 mvn clean install java -jar target/benchmarks.jar JMHSample_02 -f 1 2.maven ...

  2. Java中引用类型、对象的创建与销毁

    引用类型 在java中,除了基本数据类型之外的,就是引用数据类型了,引用指的是对象的一个引用,通过引用可以操作对象,控制对象,向对象发送消息. 简单来说,引用可以访问对象的属性,并调用对象的方法 创建 ...

  3. stackADT

    stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include <stdbool.h> typedef struct ...

  4. 转专业后补修C语言的一些体会(4)

    1.对于文件的打开和关闭操作:首先了解到,C语言将文件分成了两种类型:文本文件和二进制文件.针对这两种文件,各有不同的文件读写方式.在C语言中,文件的操作要借助一个文件指针 即FILE 类型,定义了一 ...

  5. k sum 问题系列

    转自:http://tech-wonderland.net/blog/summary-of-ksum-problems.html (中文旧版)前言: 做过leetcode的人都知道, 里面有2sum, ...

  6. Pipenv & 虚拟环境

    本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地说,您希望如何管理依赖项可能会根据 ...

  7. echarts做飞线图

    先上图,要不感觉没有说服力: 飞线图应该是大屏中很常见的一种了,通常你可以很轻易的用datav做一个飞线图,而且datav做的大屏逼格真的很高,本身也是开源免费的项目,开箱即用,上手简单……行了回归正 ...

  8. WCF 数据传输SIZE过大

    1.当客户端调用WCF服务时,接受数据过大,可通过以下配置解决 <basicHttpBinding> <binding name="BasicHttpBinding_Wcf ...

  9. kubernetes从入门到放弃(二)

    kubernetes对象之pod 1.pod的认识 Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在Kubernetes中我们不会直接操作容 ...

  10. [Write-up]-Trollcave: 1.2

    关于 下载地址:点我 Flag:root/flag.txt 哔哩哔哩:视频 信息收集 不知道VM虚拟机怎么啦,导入镜像后,用Nmap扫了,发现不了主机.所以这次用了VBox. vboxnet0的IP为 ...