知识付费网站源码下载,罗湖附近公司做网站建设,wordpress制作rss,互联网行业的开发网站文章目录前言一、11 种常见的 Java 修饰符1.1、修饰符应用表1.2、修饰符访问权限对比二、public 修饰符2.1、public 修饰符语法说明2.2、public 修饰符开发应用三、private 修饰符3.1、private 修饰符语法说明3.2、private 修饰符开发应用四、protected 修饰符4.1、protected 修…
文章目录前言一、11 种常见的 Java 修饰符1.1、修饰符应用表1.2、修饰符访问权限对比二、public 修饰符2.1、public 修饰符语法说明2.2、public 修饰符开发应用三、private 修饰符3.1、private 修饰符语法说明3.2、private 修饰符开发应用四、protected 修饰符4.1、protected 修饰符语法说明4.2、protected 修饰符开发应用五、default 修饰符(不加任何访问权限修饰符)5.1、default 修饰符语法说明5.2、default 修饰符开发应用六、static 修饰符6.1、类静态变量与实例变量6.1.1、类静态变量与实例变量语法说明6.1.2、类静态变量与实例变量开发应用6.2、类静态方法与实例方法6.2.1、类静态方法与实例方法语法说明6.2.2、类静态方法与实例方法开发应用6.3、static 静态代码段6.3.1、static 静态代码段语法说明6.3.2、static 静态代码段开发应用6.4、static 内部类七、final 修饰符7.1、final 修饰符语法说明7.2、final 修饰符开发应用八、abstract 修饰符8.1、abstract 修饰符语法说明8.2、abstract 修饰符开发应用九、接口特殊的抽象类9.1、接口语法说明9.2、接口开发应用9.3、抽象类和接口的区别是什么9.4、什么是适配器总结前言 在 Java 的语言体系中共有 11 种常见的修饰符其在我们日常的开发中一般有四种使用情况成员变量、成员方法、代码块和内部类那么在应用过程中我们还应该具体注意些什么通过本文中我们将从最基础的底层和原理来理解和疏通这些常见修饰符语法说明以及在常见的开发中如何使用。 一、11 种常见的 Java 修饰符
1.1、修饰符应用表
修饰符类构造方法方法数据块解释(default)√√√√√类、构造方法、方法或数据域在所在的包中可见public√√√√类、构造方法、方法或数据域在任何包任何程序中都可见private√√√构造方法、方法或数据域只在所在的类中可见protected√√√构造方法、方法或数据域在所属的包中可见或者在任何包中该类的子类中可见static√√√定义类方法、类数据域或静态初始化模块final√√√终极类不能扩展。终极方法不能在子类中修改。终极数据域是常量abstract√√抽象类必须被扩展。抽象方法必须在具体的子类中实现native√用native修饰的方法表明它是用Java以外的语言实现的synchronized√√同一时间只有一个线程可以执行这个方法strictfp√√使用精确浮点数计算模式保证在所有的Java虚拟机中计算结果都相同transient√标记实例数据域使其不进行序列化
1.2、修饰符访问权限对比
public protected default private
说明以下仅介绍我们常用的 7 种修饰符语法说明以及开发应用说明另外 4 种用法查看修饰符应用表即可。
二、public 修饰符
2.1、public 修饰符语法说明
修饰类、方法、变量。可以在任意位置访问公共的。
2.2、public 修饰符开发应用
开发中通常类和业务方法都使用 public 修饰。
三、private 修饰符
3.1、private 修饰符语法说明
修饰方法、变量、还可以修饰内部类。只能在本类中访问私有的。
3.2、private 修饰符开发应用
开发中通常实体类Entity,Vo中的成员变量使用 private 修饰会提供访问这些变量的方法 getter 或 setter原则上要求不准定义私有的方法。一个实体数据的表通常对应一个实体类。
四、protected 修饰符
4.1、protected 修饰符语法说明
修饰方法、变量、还可以修饰内部类。同一个包可以访问、子类可以访问子类和父类不在同一个包也可以访问。
4.2、protected 修饰符开发应用
开发中通常方法或变量是用来继承的都使用 protected 修饰。在继承中方法的重写子类方法的访问权限必须大于或等于父类方法的访问权限举例代码如下
class Fu {public void play() {}
}class Son extends Fu {void play() {}
}五、default 修饰符(不加任何访问权限修饰符)
说明使用 default 修饰符与不加任何访问权限修饰符效果是一样的。
5.1、default 修饰符语法说明
修饰类、方法、变量。只能在同一个包中访问子类也必须在同一个包中。
5.2、default 修饰符开发应用
项目中类、方法、变量根据需求通常都会指定访问权限。
六、static 修饰符
由于static 修饰符作用较多我们对其拆开进行逐步分析。
6.1、类静态变量与实例变量
类变量被存储在方法区中“只有一份”被所有对象共享。当类被加载的时候立即被存储在方法区中当类被卸载类变量立即释放内存。实例变量在创建对象之后被分配到堆内存中实例变量属于某个具体的对象。当创建对象实例变量出现在堆内存中当对象被垃圾回收实例变量立即释放内存。
比如我们创建两个对象代码如下
Cell c1 new Cell(4,5);
Cell c2 new Cell(5,6);当创建对象 c1c2 时实例变量(4,5)(5,6)出现在堆内存中当对象 c1c2 被垃圾回收实例变量立即释放内存。
6.1.1、类静态变量与实例变量语法说明
Java 中 可以通过 static 关键字修饰变量达到全局变量的效果。static 修饰的变量(静态变量)属于类在类第一次通过类加载器到 jvm 时被分配至方法区所以我们也称其为类变量。 没有 static 修饰的变量称为实例变量。
6.1.2、类静态变量与实例变量开发应用
类变量可以由类名直接访问开发中推荐使用类名的全称。
比如我们定义一个实体类代码如下
public class Student {// 实例变量在创建对象之后被分配到堆内存中实例变量属于某个具体的对象// 当创建对象实例变量出现在堆内存中当对象被垃圾回收实例变量立即释放内存String name;// 类变量被存储在方法区中只有一份,被所有对象共享static String jtName;public void print() {System.out.println(this.name);System.out.println(jtName);}
}下次使用静态变量 jtName 时我们直接使用 Student 这个类名直接调用即可。 同时我们也就可以理解下面两个对象的属性取值是一样的代码如下
public class Demo01 {public static void main(String[] args) {// TODO Auto-generated method stubStudent stu1 new Student();stu1.name 张三;stu1.jtName 王老师;Student stu2 new Student();// 一般直接取类名// stu2.jtName 卢老师;Student.jtName 卢老师;System.out.println(stu1.name);// 张三System.out.println(stu2.name);// nullSystem.out.println(stu1.jtName);// 卢老师System.out.println(stu2.jtName);// 卢老师}
}6.2、类静态方法与实例方法
静态方法static 修饰的方法属于类方法不需要创建对象就可以调用。static 方法中不能使用 this 和 super 等关键字不能调用非 static 方法只能访问所属类的静态成员变量和静态方法。静态方法(类方法),当类被加载静态方法立即被加载到方法区中类方法可以由类名直接调用。实例方法没有 static 修饰的方法实例方法当创建对象之后实例方法立即被加载到方法区中多个实例共享一份实例方法。
6.2.1、类静态方法与实例方法语法说明
类方法中不能使用 this 关键字类方法中不隐含调用该方法对象的参数。实例方法可以直接调用静态方法静态方法不可以直接访问实例成员必须创建对象由对象访问。所有对象共享的数据定义为静态变量否则定义为实例变量方法方法中没有访问实例成员可以定义为静态方法。
6.2.2、类静态方法与实例方法开发应用
项目中通常工具类中的方法都是静态的。
6.3、static 静态代码段
6.3.1、static 静态代码段语法说明
JVM 在加载类时会执行 static 静态代码段常用于初始化静态变量。static 代码只会在类被加载时执行且执行一次。静态优于对象。
6.3.2、static 静态代码段开发应用
开发中通常用于加载静态资源读取配置文件等操作在静态代码段中实现。
比如我们定义一个工具类代码如下
public class SomeUtil {// 默认的无参构造public SomeUtil() {System.out.println(创建对象);}// 静态优于对象// 静态代码段 当类被加载立即被执行一个类在同一个进程中只加载一次static {System.out.println(加载静态资源);}// 实例代码段{System.out.println(实例代码段);}public static void do1() {System.out.println(do1....);}public static void do2() {System.out.println(do2....);}public static void do3() {System.out.println(do3....);}public static void main(String[] args) {SomeUtil.do1();SomeUtil.do2();SomeUtil.do3();SomeUtil s1 new SomeUtil();SomeUtil s2 new SomeUtil();}
}执行 main 方法根据输出的内容我们可以明确看出执行的顺序。静态代码段只执行一次然后是静态方法被执行最后是 new 的对象执行无参构造和实例代码段new 一次执行一次。
同时也可以得出我们的结论静态优于对象如下图所示 6.4、static 内部类
static 内部类可以不依赖外部类实例对象而被实例化而内部类需要在外部类实例化后才能被实例化。静态内部类不能访问外部类的普通变量只能访问外部类的静态成员变量和静态方法。
七、final 修饰符
7.1、final 修饰符语法说明
final 类不能被继承。final 方法不能被重写。final 修饰的变量是常量。
7.2、final 修饰符开发应用
开发中我们使用 final 定义数据字典。
比如在如下 Card 类中我们定义数据字典用于 main 函数的输出和查询。 说明数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述其目的是对数据流程图中的各个元素做出详细的说明使用数据字典为简单的建模项目。简而言之数据字典是描述数据的信息集合是对系统中使用的所有数据元素的定义的集合。 举例使用 final 定义数据字典代码如下
public class Card {// 开发中使用final定义数据字典。public static final int SPADE 1;public static final int HEART 2;public static final int BLACK 5;public static final int FLOWER 6;public static final int THREE 0;public static final int EIGHT 5;public static final int JACK 8;public static final int QUEEN 9;public static final int KING 10;public static final int ACE 11;public static final int DUCE 12;public static final int JOKER 13;private int suit;private int num;public Card() {}public Card(int suit, int num) {this.suit suit;this.num num;}public int getSuit() {return suit;}public void setSuit(int suit) {this.suit suit;}public int getNum() {return num;}public void setNum(int num) {this.num num;}public static void main(String[] args) {Card card new Card(Card.HEART, Card.THREE);System.out.println(card.getNum());}
}八、abstract 修饰符
8.1、abstract 修饰符语法说明
抽象的可以修饰类修饰方法。
修饰抽象类
抽象类存在的意义在于被继承。抽象类不可以创建对象。abstract 不能和 final 一起使用 。
修饰抽象方法
抽象方法只有定义没有实现。如果一个类中有抽象方法这个类必须是抽象类。一个抽象类中可以没有抽象方法。抽象类的子类必须实现父类中所有的抽象方法。
8.2、abstract 修饰符开发应用
抽象类中既可以有默认实现的方法又可以有没有实现的方法。接口的适配器——用子类去实现接口中的方法。
九、接口特殊的抽象类
9.1、接口语法说明
特殊的抽象类接口中的方法都是抽象方法接口中的变量都是静态常量。定义接口使用 interface 关键字。实现接口使用 implements 关键字。类实现了接口必须实现接口中所有的方法。
如下我们定义了一个接口 MyInterface代码如下
public interface MyInterface {// 接口是高一级别的抽象。不能被实例化所以只能定义常量// 定义了变量需要实例化赋值才能使用跟接口违背// 特殊的抽象类 接口中的方法都是抽象方法 接口中的变量都是静态常量int I 10;// 如果类中所有的方法都是抽象方法使用接口void method1();void method2();
}这里我们 MyImpClass 类实现了接口就必须实现接口中所有的方法代码如下
import java.io.Serializable;/*** 其实适配器只是一个类它实现了某种接口提供了方法体。 * 这样再用到这个接口时可以直接继承适配器这样就不需要把接口中的每一个方法再填充一遍了。* 只需要在这个类中复写一下需要用的方法。这样简单方便。* * author bailu* */
public class MyImpClass implements MyInterface, Serializable {// Serializable序列化private static final long serialVersionUID 1L;// 重写接口的方法——适配器Overridepublic void method1() {System.out.println(I);}Overridepublic void method2() {}
}9.2、接口开发应用
如果类中所有的方法都是抽象方法使用接口。接口是用来制定标准或规范。可以降低组件之间的耦合度扩展组件的功能。体现了设计模式中的开闭原则。
9.3、抽象类和接口的区别是什么
抽象类中可以定义抽象方法和非抽象方法。接口中所有的方法都是抽象方法。一个类只能继承一个抽象类。一个类可以实现多个接口多个接口使用逗号分隔。
如下的类既实现了接口 MyInterface同时实现了 Serializable 序列化序列化代码如下
import java.io.Serializable;/**- 其实适配器只是一个类它实现了某种接口提供了方法体。 - 这样再用到这个接口时可以直接继承适配器这样就不需要把接口中的每一个方法再填充一遍了。- 只需要在这个类中复写一下需要用的方法。这样简单方便。- - author bailu- */
public class MyImpClass implements MyInterface, Serializable {// Serializable序列化private static final long serialVersionUID 1L;// 重写接口的方法——适配器Overridepublic void method1() {System.out.println(I);}Overridepublic void method2() {}
}抽象类之间也可以继承但是也只是支持单继承。接口之间也可以继承一个接口可以继承多个接口。
9.4、什么是适配器
适配器只是一个类它实现了接口提供了方法体。再用到这个接口时可以直接继承适配器这样就不需要把接口中的每一个方法再填充一遍了只需要在这个类中复写一下需要用的方法。
接口很好地体现了设计模式中的开闭原则。
比如我们做一个在线商城系统就需要调用第三方支付——银行或者是支付宝的支付接口。我们就需要第三方为我们提供接口里面定义了抽象的方法以及实现接口的方法——适配器我们通过调用适配器里面的方法来完成支付代码如下
ZsBankInter obj 获取实现类对象;
obj.send();
京东、淘宝
银行接口ZsBankInter
send()
类
class DoSend implements ZsBankInter{send()具体的方法
}总结 修饰符在 Java 语言中有四种使用情况成员变量、成员方法、代码块和内部类。以上我们总结了在日常的开发过程中会遇到的 11 种常见的修饰符并从最基础的底层和原理理解和疏通这些常见修饰符语法说明以及常见的开发应用案例。其中具体的内容还有很多本文就暂不一一列举待日后根据开发需要补充完毕。 我是白鹿一个不懈奋斗的程序猿。望本文能对你有所裨益欢迎大家的一键三连若有其他问题、建议或者补充可以留言在文章下方感谢大家的支持