static:静态,可以修饰成员变量,成员方法
类变量(静态成员变量):static修饰,属于类,被类的所有对象共享
实例变量:无static修饰,属于对象
public class Student{
//类变量
static String name;
//实例变量
int age;
}
调用方法:
类变量:类名.类变量(或对象名.类变量.不推荐)
实例变量:对象.实例变量
访问自己类中的类变量可以省略类名,但在某个类中访问其他类的变量,需要带类名访问
本类中的方法中参数名与类变量名一样时,也是需要加上类名前缀才行
public seUser() {
// seUser.number
number++;
}
类名的构造器不能用static修饰
// public static seUser() {此处不允许使用修饰符static
public seUser() {
seUser.number
number++;
}
类方法和实例方法
类方法:有static修饰的成员方法,属于类
用法:类名.类方法;对象名.类方法(不推荐)
public static void name(){
System.out.println("hello"):
}
实例方法:无static修饰的成员方法,属于对象
用法:对象.实例方法
public void name(){
System.out.println("hello"):
}
使用类方法设计工具类的好处:调用方便,提高了开发效率
工具类的方法用类方法而不用实例方法原因:
1)实例方法需要创建对象来调用,此时对象只是为了调方法,对象会占内存
2)类方法,直接使用类名调用,调用方便,也节省内存
如果工具类没有创建对象的要求,建议将工具类的构造器私有
案例之随机验证码
import java.util.Random;
public class fologin {
private fologin(){
//因为不需要构造对象,所以将类方法的构造器私有
}
public static String Gcode(int n){
String code="";
String date="abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM";
Random r=new Random();
for (int i = 0; i <n ; i++) {
int index=r.nextInt(date.length());
code+=date.charAt(index);
}
return code;
}
}
public class four {
public static void main(String[] args) {
System.out.println(fologin.Gcode(4));
}
}
使用类方法,实例方法时的注意事项
1.类方法中可以直接访问类的方法,不可以直接访问实例成员
2.实例方法中既可以直接访问类成员,也可以直接访问实例成员
3.实例方法中可以出现this关键字,类方法中不可以出现this关键字
代码块
类的五大成分:成员变量,构造器,方法,代码块,内部类
1.静态代码块:
格式:static{}
特点:类加载时自动执行,由于类只会加载一次,所以静态代码也只会执行一次
作用:完成类的初始化
2.实例代码:
格式:{}
特点:每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化
单例设计模式:
饿汉式:确保一个类只有一个对象
提前创建对象
写法:
1.把类的构造器私有
2.定义一个变量记住类的一个对象
3.定义一个类方法,返回对象
public class A{
//定义一个类变量记住类的一个对象
private static A book=new A();
//私有构造器
private A (){
}
//定义一个类方法返回对象
public static A getobject(){
return book;
}
懒汉式单例设计模式:拿对象时才开始创建对象
写法
把类的构造器私有
2.定义一个变量记住类的一个对象
3.提供一个类方法,保证返回的是同一个对象
public class B{
//定义一个类变量,用于存储这个类的一个对象
private static B file;
//把类的构造器私有
private B(){
}
//定义一个类方法,保证第一次调用时才创建一个对象,后面调用时都会用这一个对象返回
public static B gett(){
if(file==null){
file=new B();
}
return file;
}
}