static
类变量的应用场景
public class Test2 {
public static void main(String[] args) {
User u1 = new User();
User u2 = new User();
User u3 = new User();
User u4 = new User();
System.out.println(User.number);
}
}
public class User {
//类变量
public static int number;
public User() {
// User.number++;
//注意:在同一个类中,访问自己类的类变量,才可以省略类名不写
number++;
}
}
static修饰成员的方法
public class Student {
double score;
public static void printHelloWord()
{
//类方法
System.out.println("Hello World");
System.out.println("Hello World");
}
//实例方法(对象的方法)
public void printPass()
{
System.out.println("成绩,"+
( score >= 60 ?"及格":"不及格"));
}
}
public class Test {
public static void main(String[] args) {
//类方法的用法
//类名.类方法
Student .printHelloWord();
//对象.类方法 不推荐
Student s = new Student();
s.printHelloWord();
//2,实例方法的用法(只能用对象用)
s.printPass();
}
}
static修饰成员变量的应用场景
public class MyUtil {
private MyUtil()
{//将工具类构造器私有
}
public static String creatCode( int n)
{ //2,定义2个变量一个是记住最终产生的随机验证码,一个是记住可能用到的全部字符
String code ="";
String data="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random r= new Random();
//3,定义一个循环产生每位随机字符
for (int i = 0; i <n ; i++) {
//4,随机一个字符范围内的索引
int indix= r.nextInt(data.length());
//根据索引去全部字符提取该字符
code +=data.charAt(indix);
}
//6,再循环外面返回code
return code;
}
}
public class LoginDemo {
public static void main(String[] args) {
System.out.println(MyUtil.creatCode(4));
}
}
static的注意事项
3,关于this,this是指拿到当前对象。类方法中无对象所以不能使用。
static的应用知识
代码块
静态代码块 与实例代码块
先执行静态代码块
public class Student {
static int number =80;
static String schoolName;
//静态代码块
static {
System.out.println("静态代码块执行了————");
schoolName = "黑马";
}
//实例代码块
{
System.out.println("实例代码块执行了---");
}
public Student() {
System.out.println("无参数构造器---");
}
public Student (String name )
{
System.out.println("有参数构造器----");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Student.number);
System.out.println(Student.number);
System.out.println(Student.number);
System.out.println(Student.schoolName);//黑马
System.out.println("-------------------------");
Student s1 =new Student();
Student s2 =new Student("张三");
}
单例设计模式
public class A {
//单例类
//2,定义一个类变量记住类的一个对象
private static A a = new A();
//1,必须私有类的构造器
private A() {
}
//3.定义一个类方法返回类的对象
public static A getObject()
{
return a;
}
}
public class A {
//单例类
//2,定义一个类变量记住类的一个对象
private static A a;
//1,必须私有类的构造器
private A() {
}
//3.定义一个类方法,这个方法要保证第一次调用的时候才创建一个对象,后面调用时都会用这同一个对象返回
public static A getInstance()
{
if(a==null)
{
a= new A();
}
return a;
}
}
public class Test1 {
public static void main(String[] args) {
A a1 =A.getInstance();//第一拿对象
A a2= A.getInstance();
System.out.println(a1 == a2);
}
}
注:经常用单例对象就用 单例,不经常就用懒汉