1.成员变量
1.1概述
成员变量即属性。
1.2语法
[<修饰符 >] [aeatic] [final]< 变量类型 >< 变量名>
(1)static:表示一个类的成员变量,即静态成员变量。
(2)final:表示是一个变量。
2.This 关键字
2.1方法中调用方法或成员变量
作用:让类中的一个方法访问该类中的另一个方法或实例成员变量。
2.2 解决实例变量与局部变量同名的问题
大多数情况下,在方法中访问类中的实例成员变量无须使用 this 前缀,如果方法中的一个局部要量和实可变量呵名,但程序又需要在该方法中访问该实例变量,则必须使用 this 前缀。
3.隐藏和封装
3.1概念
封装是面向对象的三大特征之一,它指的是信息隐戴在对象内部,不允许外部程序直接访问对象内属性均被隐藏在对象内部,外界无法直接操作和修改 。
3.2使用访问控制符
private (私有) default (默认) protected (受保护的) public (公共的)
访问控制级别表
通过上述关于访问控制符的介绍,可知访问控制符用于控制一个类的成员是否可以被其他类访问。对于局部变量而言,其作用域就是在其所在的方法,因此不可能被其他类访问,因此不能使用,访问控制符修饰。
private 访问控制符修饰的属性在同一个类中可以访问。
例如:示例1
public class Person{
private String name=" 李小宏";
public static void main(String args[])
Person person = new Person();
// 同一类中可以访问所有属性
System.outprintln(" 姓名是:"+person.name);
}
default 访问控制符修饰的属性需要在同一个包中可以访问。
例如:示例2
package com.vo;
public class Personl
// 默认修饰符为 default
String name="李小宏"
}
package com.vo{
public class Test{
public static void main(String argsl)
Person person = new Person);
//访问 default 修饰的属性
System.out.printin(person.name);
}
public 访问控制符修饰的属性能够被不同包中的类访问。
例如:示例3
package com.vo;
public class Person{
public String name="李小宏"; //公有修饰符为 public
}
package com.test;
public class Test{
public static void main(String args[]){
Person person = new Personl);
System.out.printin(person.name);//访问 public 修饰的属性
}
}
4.static关键字
Java类的运行包括类加载和实例化两个阶段,当一个类被加载至JVM中,静态成员会被初始化,被 static 修饰的成员即为静态成员,静态成员包括静态代码块、静态属性和静态方法。静态成员不属于某个对象,仅属于静态成员所在的类。
4.1静态成员变量
类的成员变量包含静态变量(也称为类变量)和实例变量。静态成员变量是被 static 关键字修饰的成员变量,静态成员变量属于其所在类,被类中的所有实例共享,静态成员变量可通过类直接访问,也可通过类的实例访问。
静态成员变量
例如:示例1
public class Bank {
//静态成员变量,总钱数
private static int count = 50000 ;
public static void main(Stringll args) {
//实例化 10个Bank 对象
for(int i=0; i<10; i++){
Bank bank=new Bank();
//每次取款 1000 元,类的实例调用静态成员属性
bank.count = bank.count - 1000;
System out.printin(" 当前银行总钱数 ="+Bank.count);
}
}
}
静态变量和实例变量的区别包括以下两点
(1)静态变量共享一块内存空间,在类加载的过程中完成静态变量的内存分配即初始化,态成员变量。
(2)每创建一个实例,都会在堆内存中为其创建一块内存空间,每一个实例都含有一个属于自身的实例属性。
4.2静态方法
被static修饰的方法称为静态方法。静态方法也可通过类名直接访同。在使用静态方式时需要注造,静态方法中不能访问非静态的成员,如实例属性、实例方法。
静态方法通常作为工具方法,不会因为实例的不同而影响方法最终的执行效果。静态方法的具体操作。
例如:示例 2
public class MathUtils {
//计算平方
public static double square(double num){
return num*num;
}
public static void main(String[] args){
double num=9.6;
double result=MathUtils.square(num);
System.out.printIn(num+" 的平方 ="+result);
}
}
4.3 静微代码块
静态方法在类的载后,虽然在内存中已经分配了内存空路,但只有显式地测用都态方法时,该方法才会被执行。如果奠要在类加载时执行某一操作,则可以使用静态代码块。那态代码不存在任何方法体中,它在 Java 虚拟机加装类的被次行,如果类中包营多个器市代的,则Ja这想机将被的它门在类中出现的顺事依次执行,组经个静态代码块只会被执行一次。
静态代码块的具体操作。
例如:示例3
public ciass StaticBlock {
//第一个静态代码块
statct{
System.out.printin(''---第一个静态代码块---");
}
//第二个静态代码块
static{
System,out.printin("--- 第二个静态代码块---");
}
pubic static void main(String[] args){
System.out printinf("---main()方法被执行了 ---")
}
}
如果两个类之间存在继承关系,子类和父类中都存在静态代码块,那么首先会执行父类中的静态代码块,再执行子类中的静态代码块。
你学会了吗?快去试试吧!