热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础_Java编程思想_面向对象之static关键字

static关键字



static关键字

Java基础_Java编程思想_面向对象之static关键字 - 文章图片

static的概念

静态的

static的作用

用于修饰类的成员 : 成员变量:类变量 成员方法:类方法

调用方式

类名. 成员变量名; 类名. 成员方法名(参数);

static修饰成员变量


特点

被本类所有对象共享

需求:定义研发部成员类,让每位成员进行自我介绍

分析

  • A:研发部成员统称为开发者,定义类Developer。
  • B:每位开发者所属部门相同,所以属性departName用static修饰: public static String departName = "研发部";
  • C:Developer类的普通属性和行为: name, work;selefIntroduce();
  • D:在测试类中创建对象并使用 E : 修改部门名称为“开发部”,测试效果

代码演示

//开发者类
public class Developer {
//成员变量
//姓名
String name;
//工作内容
String work;
//部门名(公共的静态常量)
public final static String DEPARTMENT_NAME = "研发部"; //应该用static修饰
//成员方法
//自我介绍
public void selfIntroduction() {
System.out.println("我是" + DEPARTMENT_NAME + "的" + name + ", 我的工作内容是" + work);
}
}

/*
static关键字:
该单词是"静态"的意思, 可以用来修饰成员变量和成员方法.
关于static修饰的成员变量:
该变量叫静态变量(类变量), 静态变量被该类下所有的对象所共享.
静态成员的调用方式:
可以通过 类名. 的形式直接调用.
需求: 定义研发部成员类,让每位成员进行自我介绍
Developer类:
成员变量: 姓名name, 工作内容work, 部门名字departmentName
成员方法: 进行自我介绍的方法selfIntroduction();
*/
public class Test {
public static void main(String[] args) {
//需求: 创建两个员工, 然后测试
Developer d1 = new Developer();
d1.name = "小黑";
d1.work = "写代码";
d1.selfIntroduction();
Developer d2 = new Developer();
d2.name = "媛媛";
d2.work = "鼓励师";
d2.selfIntroduction();
System.out.println("---------------------");
//随着公司的发展, 部门名字要进行调整, 改为: 开发部
//Developer.departmentName = "开发部";
d1.selfIntroduction();
d2.selfIntroduction();
}
}

打印结果

Java基础_Java编程思想_面向对象之static关键字 - 文章图片

注意事项

随意修改静态变量的值是有风险的,为了降低风险,可以同时用final关键字修饰,即公有静态常量(注意命名的变化):

public final static String DEPART_NAME = "研发部";

static修饰成员方法


静态方法

静态方法中没有对象this,所以不能访问非静态成员

静态方法的使用场景

只需要访问静态成员 不需要访问对象状态,所需参数都由参数列表显示提供

需求:定义静态方法,反转数组中的元素

分析

  • A:先明确定义方法的三要素: 方法名:reverse(反转) 参数列表:int[] arr 返回值类型:void
  • B:遍历数组,交换数组索引为 ilength-1-i 的元素: arr[i] <=> arr[arr.length -1 - i]
  • C:当索引 i >= (length – 1 – i) 时,停止交换元素
  • D:在测试类中创建对象并使用

代码演示

public class ReverseArray {
int num1 = 10;
static int num2 = 20;
//静态方法中没有对象this,所以不能访问非静态成员
public static void show() {
//System.out.println(num1);
System.out.println(num2);
}
//需求:定义静态方法,反转数组中的元素
public static void reverse(int[] arr) {
/*
这里只需要完成: 交换元素的动作就可以了.
假设数组中的元素值为: int[] arr = {11, 22, 33, 44, 55};
明确谁和谁进行交换:第一个元素11 和 最后一个元素55 交换第二个元素22 和 倒数第二个元素44 交换...arr[i] arr[arr.length - 1 - i]
明确交换次数:数组的长度/2
*/
for (int i = 0; i // arr[i] 和 arr[arr.length - 1 - i]进行交换
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
}

/*
static修饰成员方法
静态方法:
静态方法中没有对象this,所以不能访问非静态成员
静态方法的使用场景
如果某方法只访问静态成员, 并且不需要通过 对象名. 的形式调用, 就可以考虑将其定义为: 静态方法.
需求:定义静态方法,反转数组中的元素
核心:
1. 其实就是arr[i] 和 arr[arr.length - 1 - i] 在交换.
2. 循环次数只需要执行数组长度的一般就可以了, 也就是: arr.length/2
*/
public class Test {
public static void main(String[] args) {
//测试show()方法
ReverseArray.show();
//小需求: 交换变量.
int a = 10;
int b = 20;
int temp = a; //temp=10, a=10, b=20
a = b; //temp=10, a=20, b=20
b = temp; //temp=10, a=20, b=10
System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("-------------------------");
int[] arr = {1, 6, 4, 5, 2, 3};
for (int i = 0; i System.out.println(arr[i]);
}
System.out.println("-------------------------");
//调用方法, 反转数组
ReverseArray.reverse(arr);
for (int i = 0; i System.out.println(arr[i]);
}
}
}

打印结果

Java基础_Java编程思想_面向对象之static关键字 - 文章图片



推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
mobiledu2502868523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有