拜访控制符
是一组限定类、属性或办法是否能够被程序里的其余局部拜访和调用的修饰符。
类的拜访控制符只能是空或者 public,办法和属性的拜访控制符有 4 个,别离是 public、 private、protected 和 friendly,其中 friendly 是一种没有定义专门的拜访控制符的默认状况。
访问控制修饰符的权限如表 1 所示。
拜访范畴 | private | friendly(默认) | protected | public |
---|---|---|---|---|
同一个类 | 可拜访 | 可拜访 | 可拜访 | 可拜访 |
同一包中的其余类 | 不可拜访 | 可拜访 | 可拜访 | 可拜访 |
不同包中的子类 | 不可拜访 | 不可拜访 | 可拜访 | 可拜访 |
不同包中的非子类 | 不可拜访 | 不可拜访 | 不可拜访 | 可拜访 |
访问控制在面向对象技术中处于很重要的位置,正当地应用拜访控制符,能够通过升高类和类之间的耦合性(关联性)来升高整个我的项目的复杂度,也便于整个我的项目的开发和保护。
static关键字
static只能润饰成员英文含意动态
润饰属性
1.被static润饰的属性所有对象共享同一个值
2.被static润饰的属性值会被保留在内存的办法区中
3.当该类的所有对象共享一个资源时,将这个资源设置为动态可能节俭内存
4.动态属性应用类名调用
5.动态属性也称为类属性
润饰办法
1.被static润饰的办法称之为静态方法,类办法
2.静态方法能够间接应用类名调用无需实例化对象
3.静态方法中无奈调用一般(实例)属性和办法,因为静态方法中没有this
4.如果一个不须要拜访以后类中的实例成员就能够定义称动态的
5.静态方法不能被重写
润饰初始化块
什么是初始化块
在代码中间接编写{},{}中的内容就是初始化块
初始化块中的内容会在构造方法运行前运行
被static润饰的初始化块只会运行一次
运行机会是JVM应用这个类之前,JVM加载类时运行动态块
加载类的状况
实例化对象
应用类名调用动态成员
反射
static润饰成员变量
用static润饰的成员变量不属于对象的数据结构,static变量是属于类的变量,通常能够通过类名来援用static成员。Static成员变量和类的信息一起存储在办法区而不是在堆中,一个类的static成员变量只有“一份”,无论该类创立了多少对象。
Static润饰办法
通常说的办法都会波及到对具体对象的操作,这些办法在调用时,须要隐式的传递对象的援用(this)。
int d=p1.distance(p2);
调用distance办法时,除了传递p2参数外,还隐式的传递了p1作为参数,在办法中的this关键字即示意该参数
static润饰的办法则不须要针对某些对象进行操作,其运行后果仅仅与输出的参数无关,调用时间接用类名援用。
double c=Math.sqrt(3.0*3.0+4.0*4.0);
该办法在调用时,没有隐式的传递对象援用,因而在static办法中不能够应用this关键字。
因为static在调用时没有具体的对象,因而在static办法中不能对非static成员(对象成员)进行拜访。Static办法的作用在于提供一些“工具办法”和“工厂办法”等。
... ... ...Point.distance(Point p1,Point p2)RandomUtils.nextInt()StringUntils.leftPad(String str,int size,char padChar)... ... ...Math.sqrt() Math.sin() Arrays.sort()
static块
static块属于类的代码块,在类加载期间执行的代码块,只执行一次,能够用来在软件中加载动态资源。
编写一个 Java 类,在类中定义一个动态变量,而后应用动态代码块批改动态变量的值。最初在 main() 办法中进行测试和输入。
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n82" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">public class StaticCode { public static int count = 0; { count++; System.out.println("非动态代码块 count=" + count); } static { count++; System.out.println("动态代码块1 count=" + count); } static { count++; System.out.println("动态代码块2 count=" + count); } public static void main(String[] args) { System.out.println("*************** StaticCode1 执行 ***************"); StaticCode sct1 = new StaticCode(); System.out.println("*************** StaticCode2 执行 ***************"); StaticCode sct2 = new StaticCode(); }}</pre>
上述代码中 { } 代码块为非动态代码块,非动态代码块是在创建对象时主动执行的代码,不创建对象不执行该类的非动态代码块。代码域中定义的变量都是部分的,只有域中的代码能够调用。
final关键字
final:(最终)是一个润饰u符。
1.final能够润饰类,函数,变量(成员变量,局部变量)。
2.被final润饰后的类不能够被其余类继承。
3.被final润饰后的函数不能够被重写。
3.被final润饰后的变量不容许被再次赋值。
final在对变量进行润饰时肯定赋值,被final润饰后的变量咱们称为变量。
<u style="box-sizing: border-box;">留神:</u>
常量的命名标准;
都要大写,如果这个名字是由多个单词组成的,在单词之间用下划线隔开。
润饰类: 示意这个类不能被继承 润饰办法: 示意这个办法不容许被子类重写 润饰成员变量(属性): 属性值不能被批改 赋值时: 要么申明时赋值 要么构造方法中赋值 润饰局部变量: 润饰办法中申明的变量只能被赋值一次
润饰办法的形式参数不能批改
final润饰变量
final关键字润饰成员变量,意为不可扭转。final润饰成员变量有以下两种形式初始化:申明的同时初始化;构造函数中初始化。final关键字也能够润饰局部变量,应用之前初始化即可。
public class Emp{private final int no=100;//final变量申明时初始化public void testFinal(){no=99;}//编译谬误,final的变量不能够扭转}
final润饰办法和类
final关键字润饰的办法不能够被重写,使一个办法不能被重写的意义在于:避免子类在定义新办法时造成“不经意”重写
final关键字润饰的类不能够被继承。
final class Foo{ } class Goo extends Foo{ } //编译谬误
JDK中有一些根底类库被定义为final的,例如:String、Math、Integer、Double等等。是一个类不能被继承的意义在于:能够爱护类不被继承批改,能够管制滥用继承对系统造成的危害。
static final常量
static final润饰的成员变量称为常量,必须申明的同时初始化,不可被扭转。
static final常量会在编译器被替换。如图:
final 修饰符应用总结
1\. final 润饰类中的变量
示意该变量一旦被初始化便不可扭转
,这里不可扭转的意思
对根本类型变量来说是其值不可变,而对对象援用类型变量来说其援用不可再变
。其初始化能够在两个中央:一是其定义处,也就是说在 final 变量定义时间接给其赋值;二是在构造方法中。这两个中央只能选其一,要么在定义时给值,要么在构造方法中给值,不能同时既在定义时赋值,又在构造方法中赋予另外的值。
2\. final 润饰类中的办法
阐明这种办法提供的性能曾经满足以后要求,不须要进行扩大,并且也不容许任何从此类继承的类来重写这种办法,然而继承依然能够继承这个办法,也就是说能够间接应用。在申明类中,一个 final 办法只被实现一次。
3\. final 润饰类
示意该类是无奈被任何其余类继承的,意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完满而不须要进行批改或扩大。
对于 final 类中的成员,能够定义其为 final,也能够不是 final。而对于办法,因为所属类为 final 的关系,天然也就成了 final 型。也能够明确地给 final 类中的办法加上一个 final,这显然没有意义。