【java初学】static关键字和接口
文章目录
- static关键字和接口
- 1. static关键字【重点】
- 1.1 static修饰静态成员变量
- 1.1.1 为什么要使用静态成员变量
- 1.1.2 静态成员变量从生活角度总结
- 1.1.3 static修饰静态成员变量代码演示
- 1.1.4 静态成员变量分析
- 1.2 static修饰静态成员方法
- 1.2.1 静态成员方法代码演示
- 1.2.2 静态成员方法使用注意事项
- 1.2.3 静态成员方法注意事项解释
- 1.2.4 静态成员方法使用
- 1.3 static修饰静态代码块
- 1.3.1 代码块都有什么?
- 1.3.2 静态代码块使用特征
- 1.4 静态面试题
- 1.5 静态总结
- 2. 接口
- 2.1 生活中的接口
- 2.2 Java中定义接口的格式和规范
- 2.3 Java中遵从接口的使用基本规范
static关键字和接口
1. static关键字【重点】
1.1 static修饰静态成员变量
1.1.1 为什么要使用静态成员变量
开发中存在一些共享数据,这些数据存在于每一个类对象中,并且一致数据!!!如果每一个对象都存储当前数据,会导致大量的资源浪费!!!共享单车共享资源,共享经济1. 共享单车不占用用户空间。占用公共空间。2. 共享单车是否与你有关???所属权归共享单车的运营公司每一个用户拥有使用权。3. 共享单车被XXX卸了座,大家都无法使用。4. 你来到北京之前,共享单车已经存在,你走之后,共享单车依然存在。饮水机共享资源1. 占用共享空间,不占用用户空间2. 饮水机与你有关?只能使用所属权归千锋郑州校区3. 饮水机里面放了巴豆,蹦沙卡拉卡...4. 你来千锋之前,饮水机在这里,你走之后,它还在这里。
1.1.2 静态成员变量从生活角度总结
1. 静态成员变量占用的内存空间是一个【公共空间/共享空间】
2. 静态成员变量所属权非对象所有。
3. 静态成员变量一旦被修改,或者出现问题,所有使用者都会受到影响
4. 静态成员变量生存周期是比对象要长久一点点,来的比对象早,走的比对象晚
1.1.3 static修饰静态成员变量代码演示
package com.qfedu.a_staticfield;// Ctrl + D 删除当前行
class Person {public String name;public int age;// 国籍是存在共享数据性质,这里可以使用static修饰 public static String country = "中华人民共和国";public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}
}public class Demo1 {public static void main(String[] args) {Person p1 = new Person("骚磊", 16);Person p2 = new Person("老黑", 66);Person p3 = new Person("鹏鹏", 6);Person p4 = new Person("帅栋", 30);Person p5 = new Person("杨仔", 61);Person p6 = new Person("博哥", 86);/** 通过类名方式直接调用静态成员变量,就是所谓的静态方式,没有任何的警告* 这里IDE工具也是在提示你,static修饰的内容和【对象】无关,【没有对象】*/System.out.println(Person.country);/** The static field Person.country should be accessed in a static way* Person类内static修饰的静态变量 country应该通过静态方式访问*/System.out.println(p1.country);System.out.println(p2.country);System.out.println(p3.country);System.out.println(p4.country);System.out.println(p5.country);System.out.println(p6.country);/** 静态成员变量不管通过哪一种方式修改,所有使用位置都会受到影响* 这里其实也是【共享数据】的一个基本规范。*/Person.country = "PRC";// p1.country = "PRC";System.out.println(p1.country);System.out.println(p2.country);System.out.println(p3.country);System.out.println(p4.country);System.out.println(p5.country);System.out.println(p6.country);}
}
package com.qfedu.a_staticfield;public class Demo2 {public static void main(String[] args) {/** 在没有Person类对象情况下,依然调用了country静态成员变量*/System.out.println(Person.country);// 创建了一个Person对象,但是是一个匿名对象,【阅后即焚】new Person();/** Person对象被销毁之后,静态成员变量依然可以使用,*/System.out.println(Person.country);}
}
1.1.4 静态成员变量分析
静态成员变量所属权非对象所有,和对象无关???1. 内存占用角度静态成员变量占用的内存空间是内存【数据区】类对象占用的内存空间是一个内存【堆区】两者不再同一个内存空间中,有且只是类对象中存在一个【引用数据类型变量】指向数据区静态成员变量。2. 代码中没有类对象依然可以使用静态成员变量在没有类对象情况下,可以通过类名直接调用对应的静态成员变量在对象被销毁之后,依然可以通过该类名调用静态成员变量与对象无关,【没有对象】静态成员变量一旦被修改,或者出现问题,所有使用者都会受到影响这是共享资源的基本特征。静态成员变量是在内存的数据区,所有的使用操作都是唯一的静态成员变量,不管是通过类名修改操作,还是通过类对象修改操作,修改使用的内存都是同一个内存。静态成员变量生存周期是比对象要长久一点点,来的比对象早,走的比对象晚【重点】static修饰的静态成员变量是在【类文件加载阶段完成定义和内存划分】类文件:Demo1.java ==> javac.exe ==> Demo1.class 二进制文件/字节码文件/类文件加载阶段:程序运行之前的loading阶段(读条),准备好所有运行之前准备工作静态成员变量在程序之前的准备阶段已经完成定义和内存划分。当前情况下静态成员变量已经可以使用。当前情况下是没有创建对象的。【没有对象】Java程序退出之前,首先会将所有的占用内存全部归还给计算机。这里涉及到JVM的GC机制,会销毁所有的类对象,任何在释放【类文件占用内存空间】。释放类文件空间的过程中,会销毁【静态成员变量占用数据区内存空间】。销毁时间要晚于类对象。【】
1.2 static修饰静态成员方法
1.2.1 静态成员方法代码演示
package com.qfedu.b_staticmethod;class SingleDog {// 非静态成员变量private String name;private int age;// 静态成员变量private static String country = "中华人民共和国";// 非静态成员方法public void whyYouSingleDog() {name = "骚磊";System.out.println("别太直男...");}// 静态成员方法public static void testStatic() {/** Cannot make a static reference to the non-static field name* 静态成员方法中,不得使用类内的非静态成员变量*/// name = "骚磊";// System.out.println(name);/** Cannot make a static reference to the non-static method whyYouSingleDog() from the type SingleDog* 静态成员方法中,不得使用类内的非静态成员方法*/// whyYouSingleDog();/** Cannot use this in a static context* 不能在一个静态区域能使用this关键字*/// System.out.println(this);/** 静态成员方法可以使用类内的静态成员变量和类内的静态成员方法 【难兄难弟】*/System.out.println(country);test();System.out.println("静态成员方法");}public static void test() {System.out.println("其他静态成员方法");}
}public class Demo1 {public static void main(String[] args) {/** The static method testStatic() from the type SingleDog should be accessed in a static way* SingleDog类内的静态成员方法testStatic()应该通过静态的方法操作访问*/new SingleDog().testStatic();/** 推荐使用类名直接调用类内的静态成员方法。*/SingleDog.testStatic();}
}
1.2.2 静态成员方法使用注意事项
1. 静态成员方法推荐使用类名直接调用,不推荐使用类对象调用。因为【没有对象】
2. 静态成员方法不能使用类内的非静态成员(非静态成员 ==> 成员变量和成员方法),因为【没有对象】
3. 静态成员方法可以使用类内的其他静态成员(静态成员 ==> 静态成员变量和静态成员方法),【难兄难弟】
4. 静态成员方法在类文件加载阶段已经定义完成,早于类对象出现,晚于类对象销毁。所以【没有对象】
1.2.3 静态成员方法注意事项解释
静态成员方法在类文件加载阶段已经定义完成静态成员方法随着类文件的加载而加载完成。静态成员方法的加载完成标准1. 明确所有的内容 返回值类型,方法名和形式参数列表。三要素准备就绪2. 方法体内功能代码完备,可以执行。3. 加载完毕之后,当前方法已经具备执行能力。静态方法是推荐使用类名调用的!!!调用当前方法的方式非对象方式,所有和对象相关的内容,都无法使用。静态成员方法是在类文件加载阶段准备就绪,此时是没有任何的对象存在的!!!
1.2.4 静态成员方法使用
Arrays.toString();
静态成员方法优势:1. 通过类名调用,简单直接2. 没有类对象约束,同时也没有无关的内存浪费。3. 静态成员方法所需参数全部是外来数据一般情况下静态成员方法通常作为工具类使用。Arrays工具类数组操作的工具类BeanUtils工具类操作符合JavaBeans规范的类对象工具类
package com.qfedu.b_staticmethod;import java.util.Arrays;public class Demo2 {public static void main(String[] args) {int[] arr = {2, 3, 5, 7, 2, 2, 4, 2, 8, 10};/** Arrays工具类 * static String toString(任意类型数组);* 返回数据是当前数组的字符串描述形式* [元素, 元素, 元素]*/String str = Arrays.toString(arr);System.out.println(str);/** Arrays工具类* static void sort(基本数据类型数组);* 快速排序,默认方式为升序,效率高的吓人,但是内存浪费也吓人* 时间换空间,空间换时间*/Arrays.sort(arr);System.out.println(Arrays.toString(arr));/** Arrays工具类* static int binarySearch(任意类型数组, 指定查询数据);* 找出指定数据在数组中的下标位置,二分法查找。* 二分法查询要求当前数据必须是通过sort排序的,如果未排序,不保证数据* 查询结果有效性。* 二分法查找 不保证找的数据是第几个*/int index = Arrays.binarySearch(arr, 0);System.out.println(index);}
}
1.3 static修饰静态代码块
1.3.1 代码块都有什么?
构造代码块在class大括号以内只要调用当前类内的构造方法,就一定执行构造代码块内容,并且是先于构造方法执行{}局部代码块在方法大括号以内在方法中为了极致的约束变量的操作范围,提高内存的回收效率,使用的代码块{}静态代码块在class大括号以内只要当前类文件加载,就一定会执行static代码块以内的内容【注意】代码块中类文件的加载是当前程序中的确需要当前类提供一定的数据支持,才会被JVM执行加载static {}
1.3.2 静态代码块使用特征
1. 静态代码块不能使用类内的非静态成员【没有对象】
2. 静态代码块不能使用this关键字 【没有对象】
3. 静态代码块能使用类内的静态成员
4. 静态代码块在类文件加载阶段执行完毕,并且有且只执行一次。作用:主要用于程序初始化过程。JDBC 所使用驱动 Driver 对应数据库的 URL 数据库登陆所需 User 和 Password
1.4 静态面试题
// 【重点】
class Demo {static Demo d1 = new Demo();static Demo d2 = new Demo();{System.out.println("构造代码块");}static {System.out.println("静态代码块");}public Demo() {System.out.println("构造方法");}public static void main(String[] args) {Demo d = new Demo();}
}
/*
分析代码的执行流程构造代码块构造方法构造代码块构造方法静态代码块构造代码块构造方法
*/
// 不要忘记知识点本来的样子
class Demo {Demo d1 = new Demo();static Demo d2 = new Demo();{System.out.println("构造代码块");}static {System.out.println("静态代码块");}public Demo() {System.out.println("构造方法");}public static void main(String[] args) {Demo d = new Demo();}
}
/*
分析代码的执行流程代码运行错误会导致StackOverFlowError 内存溢出应该类对象创建过程中会执行成员变量初始化操作,而在代码中存在一个成员变量也在创建当前类对象,这里会导致构造方法无限递归。
*/
1.5 静态总结
1. 静态修饰的内容都是在类文件加载阶段进行操作的静态成员变量和静态成员方法是准备就绪,随时都可以通过类名直接调用。静态代码块直接执行,而且有且只执行一次,按照最基本的【顺序结构】执行。2. 所有静态修饰的内容,都无法直接使用与对象相关内容,3. 静态成员变量存在共享性和持久性。静态成员方法工具方法,没有对象约束更加方法静态代码块用于初始化整个程序,JDBC会涉及到4. 静态之间的内容可以相互使用,相互操作。
2. 接口
2.1 生活中的接口
生活中常用接口:USB-A, USB-B, USB-C, PCI-E, RJ45, 3.5MM, HDMI, DisplayPort. SATAM.2 SATA接口能做什么???USB充电,键盘,鼠标,U盘,硬盘,麦克风,转网线,声卡...接口只指定规范,接口连接的设备,决定当前操作的功能。
2.2 Java中定义接口的格式和规范
关键字:interface UI ==> User Interface定义接口的格式:interface 接口名 {成员变量;成员方法;}接口规定数据,不能改变接口指定的规范,由别人实现
interface A {// 成员变量// The blank final field num may not have been initialized// 接口中成员变量缺省属性/默认属性 public static finalint num = 10;// 成员方法// Abstract methods do not specify a body// 接口中成员方法缺省属性/默认属性 public abstractvoid test();
}
2.3 Java中遵从接口的使用基本规范
关键字implements格式:class TypeA implements A {要求当前遵从接口A的实现类,必须完成接口中所有的缺省属性为abstract的方法。}
interface 接口名 {成员变量;成员方法;
}
接口规定数据,不能改变
接口指定的规范,由别人实现
```java
interface A {// 成员变量// The blank final field num may not have been initialized// 接口中成员变量缺省属性/默认属性 public static finalint num = 10;// 成员方法// Abstract methods do not specify a body// 接口中成员方法缺省属性/默认属性 public abstractvoid test();
}
【java初学】static关键字和接口相关推荐
- java的static关键字
java的static关键字 静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static ...
- 【零基础学Java】—static关键字概述(十六)
[零基础学Java]-static关键字概述(十六) 一.static关键字 二.static关键字修饰成员变量 /*** @author :CaiCai* @date : 2022/4/8 11:1 ...
- 面试官:兄弟,说说Java的static关键字吧
读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...
- java中static关键字的理解(转载)
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...
- 二、final和static关键字,接口和抽象类
fianl关键字的作用 final代表最终的意思,可以修饰成员方法,成员变量,类 final修饰类.方法.变量的效果 final修饰类:该类不能被继承(不能有子类,但是可以有父类) final修饰方法 ...
- java中static关键字的作用(java中static关键字的作用)
关键字static的作用是什么? 在Java语言中,static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但 ...
- Java中static关键字总结
原文地址:http://blog.sina.com.cn/s/blog_61889f5c010105tr.html 1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象 ...
- Java基础-static 关键字解析
参考文章: https://www.cnblogs.com/dolphin0520/p/3799052.html static的应用: 1.static是为了在没有创建任何对象的前提下,仅仅通过类本身 ...
- java中static关键字简介
static静态关键字: static关键字可以修饰成员变量和成员方法,被修饰的成员是属于类的,而不是简简单单的属于某个对象,也就是说可以不用通过对象调用,而是通过类直接调用. 类变量(静态变量):被 ...
最新文章
- 小白入门深度学习 | 第四篇:配置PyTorch环境
- 使用Java消费API的一个错误消息PKIX path building failed以及解决方案
- Java 时间处理(格式解释、格式化时间、获取当前时间、获取年份、月份等、时间戳转换成时间)
- javascript的运算(小结)
- Angular4的QuickStart—— ES6 而非TypeScript
- linux 磁盘分区,格式化,挂载
- C++传递数组给函数
- HCIE-Security Day12:补充包过滤和安全策略的概念
- mysql:Error while performing database loggin with the mysql driver
- New Concept English Two 5
- adguard home上网慢_如何正确使用smartdns搭配adguardhome, 优选dns并去除广告
- Android 使用三级缓存实现对图片的加载
- 【opencv4.3.0教程】12之图像的加add、减subtract、乘multiply、除divide
- 解决html图片空隙留白问题
- 关于音频情感分类的随笔(5)
- spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务
- 工控软件虚拟机 portal v15 v16 v17 prof版合一
- EXCEL中两列合并成一列以及根据相同列的值将表中一列的值复制到另一张表中?
- Android Studio下载gitLab项目
- 计算机颜色偏蓝,电脑屏幕颜色偏蓝的四种解决方法
热门文章
- html5花瓣掉落,用掉落的花瓣,可以玩出多少种让人惊艳的创意?
- The file contains top level spacers. They will not be saved.Perhaps you forgot to create a layout
- AS升级4.1后插件报错的问题
- 波波碰大乱斗发布——与轨迹历代角色自由对战~
- PIP生存记 | 10%强制淘汰率? Amazon好进,不好混。
- 第一次做项目经理总结_干货:项目结束后,哪些经验教训要总结?
- 如何在Ubuntu系统 上登录北理工教务处查看选项(转自FTP联盟)亲测成功
- Qt QuaZip 解压zip文件
- shell脚本实例-交叉证认
- 读取用户输入的账户名称,将账户名写入到数组保存