十五、static关键字
static静态属性的声明
代码演示:
package demo;class People
{private String name;private int age;private String course;public People(){}public People(String name,int age,String course){this();this.name = name;this.age = age;this.course = course;}void talk(){System.out.println("my name is "+name+",i'm "+age+" years old, and i'm study "+course+" now");}
}
public class StaticDemo {public static void main(String[] args){People p1 = new People("dodo",21,"java");People p2 = new People("jiahui",20,"java");People p3 = new People("haha",21,"java");p1.talk();p2.talk();p3.talk();}
}
在上述代码里,我们举了一个例子,3个学生在学习java这门课程,考虑一个问题,当我们上完了java课程了,想学习一下linux,我们是不是需要将这三个人的course属性都修改一遍?如果我们的班级有50人了呢?修改50遍的工作量就很大了。这显然需要工作量就很大了。
因此,我们使用static关键字来修改属性,这样用static修饰后的属性就是公共属性了,它是属于类的属性。
代码演示:
package demo;class People
{private String name;private int age;static String course;public People(){}public People(String name,int age,String course){this();this.name = name;this.age = age;this.course = course;}void talk(){System.out.println("my name is "+name+",i'm "+age+" years old, and i'm study "+course+" now");}
}
public class StaticDemo {public static void main(String[] args){People p1 = new People("dodo",21,"java");People p2 = new People("jiahui",20,"java");People p3 = new People("haha",21,"java");p1.talk();p2.talk();p3.talk();//我们修改课程信息,等价于 p1.setCourse("html")p1.setCourse("html");System.out.println("更换完课程信息后:");p1.talk();p2.talk();p3.talk();}
}
我们来看一下内存空间状态
我们可以通过内存状态看到,使用static修改属性后,属性就将会是公有的,属于类的了,修改其中一个对象的course属性,其实就是修改了所有人的course属性。
static静态方法的声明
static既可以修饰属性,同样也可以修饰方法,使用static修饰的方法称为“类方法”,使用static修饰的方法除了可以用对象去调用,还可以使用类名调用。上面的例子,我们是直接对属性值进行修改的,我们记得,在java开发过程中,如果对属性值能够进行修改,是不安全的,我们接下来将course属性私有化,提供一个静态方法来修改课程信息。并使用类名调用
package demo;class People
{private String name;private int age;//静态属性私有化private static String course;public People(){}public People(String name,int age,String course){this();this.name = name;this.age = age;this.course = course;}void talk(){System.out.println("my name is "+name+",i'm "+age+" years old, and i'm study "+course+" now");}//声明一个静态方法用来修改课程信息public static void setCourse(String str){course = str;}
}
public class StaticDemo {public static void main(String[] args){People p1 = new People("dodo",21,"java");People p2 = new People("jiahui",20,"java");People p3 = new People("haha",21,"java");p1.talk();p2.talk();p3.talk();//我们修改课程信息,等价于 p1.setCourse("html")People.setCourse("html");System.out.println("更换完课程信息后:");p1.talk();p2.talk();p3.talk();}
}
static主方法(main)
前面章节我们多次使用到main方法,我们能够注意到main都是static修饰的。我们来解释一下,如果一个类想要被java解释器直接加载运行,这个类中就必须包含main()方法,java虚拟机需要调用该类的main()方法,所以main()方法的访问权限就必须是public,又因为虚拟机在执行main()方法时候不必创建对象,所以该方法必须是static的,我们还能够注意到main()方法是带参数的,这是因为我们在有需要的时候,可以直接给main方法直接传入参数,我们来玩一下
代码演示:
package demo;public class TestMain {public static void main(String[] args) {//获取args数组的参数,循环输出for(int i = 0;i<args.length;i++){System.out.print(args[i]+" ");} }
}
执行代码前:
1.鼠标左键单击TestMain方法,选中
2.右键--->Run as--->Run Configurations
3.注意,选择的工程,和包还有类是对的,即同学们的类所在的工程和包还有类名,bigdodo的工程是Demo,包是demo,类名是TestMain
4.设置参数1 2 3 4 5 6,参数间空格隔开
5.点击Run,运行
代码运行结果:
static静态代码块
代码演示:
package demo;class Person{public Person(){System.out.println("执行Person构造方法");}static{System.out.println("执行Person类的static方法");}
}public class StaticDemo{static{System.out.println("执行StaticDemo类的static方法");}public static void main(String[] args) {System.out.println("执行main方法");Person p1 = new Person();Person p2 = new Person();}
}
代码结果:
代码讲解:
1.一个类可以使用不包含在任何方法体类的静态代码块
2.当类被加载的时候,static静态代码块会优先执行,且只执行一次
3.静态代码块,通常用来进行类属性(static修饰的属性)赋值
在同一个类下,使用static关键字修饰方法
有时候我们需要在一个类下包含main()方法,而此时我们还想在同一个类下,执行某些代码逻辑,完成一些功能,这时候我们就需要对方法进行static修饰,不然main()方法没法调用
代码演示:
package demo;public class StaticDemo{public static void main(String[] args) {int a = 15;int b = 16;System.out.println(sum(a, b));}public static int sum(int a,int b){return a+b;}
}
代码讲解:使用static修饰方法后,在main()方法里,我们就可以直接使用方法名即可完成调用。
总结点评:需要记得static关键字,修饰的属性和方法,我们都可以理解为修饰后的属性和方法,不再属于单个对象,它是属于整个类的。静态代码块在类加载的时候会优先执行,且只执行一次。
十五、static关键字相关推荐
- Java SE 第二十三讲----static关键字and final关键字
1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...
- 【Java学习笔记之十五】Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- 二十五、深入Java中的static静态修饰符
@Author:Runsen @Date:2020/6/2 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- Java学习 第十五章 成员变量和局部变量的区别 / 三大特征之一 (封装性)/构造方法 /private关键字
第十五章 局部变量和成员变量: 1.定义位置不一样 局部变量:在方法内部定义 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样 局部变量:只能在方法当中使用 成员变量:整个类都可以使用 3. ...
- 【零基础学Java】—static关键字概述(十六)
[零基础学Java]-static关键字概述(十六) 一.static关键字 二.static关键字修饰成员变量 /*** @author :CaiCai* @date : 2022/4/8 11:1 ...
- 教妹学Java(二十六):static 关键字解析
你好呀,我是沉默王二,(目前是)CSDN 周排名前十的博客专家.这是<教妹学 Java>专栏的第二十六篇,今天我们来谈谈 Java 的 static 关键字--什么是静态变量?什么是静态方 ...
- 第四十五章 外键关键字 - SqlName
文章目录 第四十五章 外键关键字 - SqlName 用法 详解 默认 第四十五章 外键关键字 - SqlName 为外键指定一个SQL别名. 用法 要覆盖此外键的默认SQL名称,请使用以下语法: F ...
- 第十节(this关键字 static关键字)
this 关键字:是指当前调用的对象,如果有 100 个对象,将有 100 个 this 对象指向各个对象this 关键字可以使用在:1. 当局部变量和成员变量重名的时候可以使用 this 指定调用成 ...
- 一文带你入门C++,类与对象、6个默认成员函数、this指针以及static关键字。
C++98关键字:63个 一.命名空间规则(namespace) 1.命名空间可以解决函数.全局变量名重复的问题,包在不同的命名空间里的重复函数,实际就是两个完全无关的函数. 2.命名空间允许续嵌套: ...
- Java编程思想第四版——第十五天
2012-04-23 121-131/913 Java编程思想第四版--第十五天 5.5.3 终结条件 通常不能指望finalize(),必须创建其他的"清理"方法,并明确的调用它 ...
最新文章
- 编写程序,统计一个长度为2的字符串在另一个字符串中出现的次数
- 【渝粤题库】广东开放大学 公共部门人力资源管理 形成性考核
- wireshark网卡权限_网络分析系列之六_Wireshark安装
- linux/npm/git的简单操作
- 数据异常HTML,@ Html.DropDownListFor的数据绑定异常
- Android 系统(193)----图解从URL到网页通信原理
- Marching Cubes
- 深度剖析Java数据结构之表(四)——LinkedList泛型类的实现
- 两次DFS,POJ(1481)
- vb还是python强大-vb和python哪个速度快
- 幼儿园计算机课程心得,幼儿主题式课程教学心得体会
- Hello CSDN blog
- [Win] 免登录百度网盘高速下载器 ENFI下载器 v1.3.1
- 计算机安全模式无法启动,我的电脑安全模式可以进去,为什么不能正常起动呢?...
- 关于Diy51单片机的趣事
- MySQL34道例题
- 什么叫做走心的文案?怎么写走心的文案?
- cpm自动SEO写文章 关键词文本生成工具3.0版本
- 50个经典的增长黑客策略
- 灯下翻书——人生乐事不过“夕阳西下,微风吹衣,访得久觅之书,挟之而归”。...
热门文章
- 使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错...
- Android应用模块之间通信模式
- 学术族谱典型用户及典型场景模拟
- [导入]QZONE跳转FLASH地址生成工具
- java 解码_如何在Java中进行URL解码?
- 电脑无线网络显示红叉_Maxidix Wifi Suite下载_无线网络管理软件中文版v14.5.8
- 拓端tecdat|使用R语言进行时间序列(arima,指数平滑)分析
- sourcemointor评价代码
- Linux下conda镜像源配置
- 一个简单的前后端分离案例