Java笔记(全局变量,局部变量、修饰符、关键字、单例模式)
/**
* 全局变量,局部变量
* 修饰符
* 关键字
* 单例模式
*/
1.全局变量:类中在⽅法外⾯定义的变量(所有⽅法都可以⽤)
private int age = 10;
public void getAges() {
System.out.println("我是全局变量:" + age);
}
2.局部变量:在⽅法⾥⾯定义的变量(只在本⽅法体内使⽤)
public void getAge() {
int age = 30;
//就近原则,打印的是局部变量
System.out.println("我是局部变量:" + age);
}
问题:如果在⽅法⾥⾯定义⼀个与全局变量名⼀样的局部变量名,⽽我想使⽤全局变量,该怎么使⽤?(⽤this)
public void getAgess() {
int age = 30;
// this 代表本类
// this.age 代表类⾥⾯的 age 属性,打印全局变量
System.out.println("我也是全局变量:" + this.age);
}
3.修饰符(public,protected,默认的(不写),private)
3.1 public 修饰的东西是个类就能使⽤
public int id = 2;
3.2 protected 修饰的东西只要在⼀个包⾥就能使⽤(⼀般在⼦类⾥⾯使⽤)
protected int id2 = 4;
3.3 默认的(不写)修饰的东西只能在同⼀个包,同⼀个类中使⽤
int id3 = 5;
3.4 private 修饰的东西只能在本类中使⽤
private int id4;
修饰符访问权限总结:
public 同⼀个类中同⼀个包中不同的⼦类即不同包也不同⼦类
protected 同⼀个类中同⼀个包中不同的⼦类
默认的同⼀个类中同⼀个包中
private 同⼀个类中
4.关键字(static,final)
4.1 static:静态
public static int n1 = 1;
public int n2 = 2;
public void show() {
public void show() {
System.out.println("静态变量:" + n1); //普通⽅法可以直接调⽤静态变量
System.out.println("普通变量" + n2);
}
public static void print() {
System.out.println("静态变量:" + n1); //静态⽅法可以直接调⽤静态变量
//System.out.println("普通变量" + n2); //静态⽅法不能直接调⽤普通变量
//静态⽅法想要调⽤普通变量,需要实例化(⽅法同理)
Statics s = new Statics();
System.out.println("我是静态⽅法通过实例化调⽤的普通变量:" + s.n2);
}
/
/ 静态变量可以直接⽤类名点出来(不需要实例化)
System.out.println("我是静态变量:" + Statics.n1);
// ⼀个类⽆论被实例化多少次,类中的静态变量只会被初始化⼀次
Statics s1 = new Statics();
s1.n1 = 2; //类中的 n1 = 1, 现在 s1 这个对象把 s1.n1 = 2;
System.out.println(s1.n1);
Statics s2 = new Statics();
System.out.println(s2.n1); //再实例化⼀个对象 s2 ,它的 n1 不是1,⽽是2
static 总结:
修饰⽅法:表⽰该⽅法可以通过类名直接调⽤⽅法(不需要实例化)
在静态⽅法中只能访问静态变量或⽅法,不能直接调⽤普通⽅法或变量
在静态⽅法中必须通过类的实例化才可以调⽤普通⽅法或变量
普通⽅法可以直接访问静态变量或调⽤静态⽅法
修饰属性:表⽰该属性可以通过类名直接调⽤属性(不需要实例化)
⼀个类⽆论被实例化多少次,类中的静态属性,只会被初始化⼀次
4.2 静态块(最先执⾏的代码)
static {
System.out.println("我是静态代码块,第⼀个运⾏的代码,构造⽅法都没有我快");
}
4.3 final
public static final int NUM = 10; //代表它是⼀个常量(全部⼤写),并且不能再更改它的值
final 总结:
修饰类:表⽰这个类不能有⼦类()
修饰⽅法:表⽰该⽅法不允许被⼦类重写
实例化类和实例化对象修饰属性:表⽰属性是⼀个常量,赋值以后,值就不允许改变
5.单例模式(只会实例化⼀次对象,防⽌类的对象被频繁创建,导致更多的系统资源消耗) public class Student {
//创建⼀个类成员变量,⽤于存储该类的实例化对象
private static Student instance;
//私有化构造⽅法,防⽌其它类实例化该对象
private Student() {
}
//返回该对象实例的⽅法
public static Student getInstance() {
//判断是否已经实例化了对象
if(instance == null) {
if(instance == null) {
//该类还没有使⽤过,就实例化⼀个对象
instance = new Student();
}
//已经存在了实例化对象,直接返回该实例化对象
return instance;
}
}
public class TestStudent {
public static void main(String[] args) {
Student s = Instance();
System.out.println(s);
Student s2 = Instance();
System.out.println(s2);
//以上说明,都是同⼀个对象,不会重新开辟新的内存空间
}
}
单例模式详细解释:
public class SingletonPattern {
//单例模式(防⽌类被频繁实例化,导致更多的系统资源消耗)
/
/如果想要不被实例化应该怎么做呢?
//私有化构造⽅法就可以防⽌其被实例化
private SingletonPattern() {
}
//构造⽅法被私有化了,那怎么得到这个类的对象呢?
//在类⾥⾯创建⼀个类变量存储该类的实例化对象
//因为它只需要被初始化⼀次,且下⾯的⽅法是静态⽅法,⽅法⾥⾯需要⽤到该变量,所以这个变量也要⽤ static 修饰 private static SingletonPattern instance;
//怎么让其它类获得这个对象呢?
//创建⼀个公开的⽅法返回值是该对象
//不给其它类实例化,那怎么让其他类获得这个⽅法呢?
//⽤ static 修饰该⽅法就可以直接通过类名点出⽅法
public static SingletonPattern getInstance() {
//判断该类是否使⽤过,如果已经实例化了⼀次,那么就直接返回该对象的实例化
if(instance == null) {
//如果这个类没有被使⽤过⼀次,那么就把该对象的实例化存储给这个类中的类变量
instance = new SingletonPattern();
}
//返回存储该类的类变量
return instance;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论