做网站要学会什么软件微信头像定制软件
news/
2025/9/23 20:36:17/
文章来源:
做网站要学会什么软件,微信头像定制软件,做门窗的建网站怎么赚钱,网站商业模板Static修饰成员变量
Static是什么
叫静态#xff0c;可以修饰成员变量#xff0c;成员方法 成员变量按有无static修饰分俩种#xff1a;
类变量#xff1a;有static修饰#xff0c;属于类#xff0c;在计算机里只有一份#xff0c;会被类的全部对…Static修饰成员变量
Static是什么
叫静态可以修饰成员变量成员方法 成员变量按有无static修饰分俩种
类变量有static修饰属于类在计算机里只有一份会被类的全部对象共享实例变量对象的变量无static修饰属于每个对象的 类变量为所有对象共享类变量的生命周期同类一样而每个对象都有独属于自己的示例变量实例变量的生命周期同对应实例一样公家的和自家的区别 访问类变量的方式
类名.类变量推荐高效方便对象.类变量不推荐 ——通过类名访问相当于直接去方法区找到类和对应类方法而通过对象访问是先找到对象再通过对象去找类再找到对应类方法 代码演示
创建一个学生类 public class Student {static int grade; //年级String name; //姓名
} 创建俩个学生对象 public class StaticDemo1 {public static void main(String[] args) {Student s1 new Student(); //定义学生对象1Student s2 new Student(); //定义学生对象2Student.grade 1; //通过类名访问类变量给类变量grade赋值
// s1.grade 2; //也可以通过对象来访问类变量不过不推荐这麽做s1.name 小明; //学生对象1实例变量赋值s2.name 小红; //学生对象2示例变量赋值System.out.println(我是 Student.grade 年级的 s1.name); //输出学生对象1和学生对象2的信息System.out.println(我是 Student.grade 年级的 s2.name);}
}
注实例变量不能通过类名去访问
像这种访问方式是错误的因为实例变量独属于每个对象只通过类名怎么知道你是想访问哪个对象呢~
类变量的应用场景 在开发中如果某个数据只需要一份且希望能够被共享访问、修改则该数据可以定义成类变量来记住
案例
有一个学生类希望学生类可以自己记录已经创建过多少学生对象
public class Student2 {public static int number; //记录已经创建多少个学生对象public Student2() {//在同一个类中访问自己类的类变量可以不写类名在别的类中需要写类名number; //每次调用构造函数都记录下来}
}
public class StaticDemo2 {public static void main(String[] args) {Student2 s1 new Student2();Student2 s2 new Student2();Student2 s3 new Student2();System.out.println(我已经创建了 Student2.number 个学生对象啦);}
}
运行结果 Static修饰成员方法
成员方法按有无Static修饰分俩种
类方法有Static修饰的成员方法属于类实例方法无Static修饰的成员方法属于对象
类方法不可以访问实例方法和实例变量但是实例方法可以访问类方法和类变量
访问类方法的方式
类名.类方法推荐高效方便对象.类方法不推荐
代码演示
对象 public class Student3 {double score; //分数public static void HelloWorld(){ //Static修饰的成员方法——类方法System.out.println(HelloWorld!);}public void Pass(){ //没用Static修饰的成员方法——实例方法System.out.println(this.score 60? 及格 : 不及格);}
} 访问 public class StaticDemo3 {public static void main(String[] args) {//通过类名访问实例方法推荐Student3.HelloWorld();//通过对象访问实例方法.不推荐Student3 s new Student3();s.HelloWorld();//通过类名访问实例方法报错
// Student3.Pass();}
} 注同实例对象一样实例方法也不能通过类名去访问
小知识
其实main方法就是一个类方法当我们用java命令执行程序的时候虚拟机会用当前类直接.main()方法也就是说 java test test.main(), 那么main方法括号里的字符串数组是干什么的呢这个数组实际上是用来接收数据的并且我们也可以去使用这个数组里的数据如果有的话我们可以在控制台执行class文件的时候传入一些参数给main方法使用比如现在有这麽一串代码
public class Test {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}}
}
在控制台编译执行并传入数据给它 类方法的常见应用场景
类方法最常见的应用场景是设计工具类 工具类是什么
用来完成某一个功能的用来给开发人员共同使用的类方法
使用类方法设计工具类有什么好处
提高了代码复用调用方便提高了开发效率 如果需要一个类只存一些需要重复使用的方法那么就可以创造一个专门提供这些方法的工具类在类里面创造需要的类方法需要使用该方法的时候直接类名.类方法就可以很方便的使用了。例如有多个类都需要创建指定位数验证码时就可以 创建一个工具类专门存放生成随机验证码方法以供调用 案例 假设现在有一个方法1需要创建一个四位验证码另一个方法2需要创建一个六位验证码为了提高代码复用减少重复代码我们就可以专门为创建验证码这个方法设计一个方法类放在工具类中以供调用
方法1代码
public class Demo1 {//需要创建四位验证码public void CreateCode(){System.out.println(MyUtil.CreateCode(4));}
}
方法2代码
public class Demo2 {//需要创建六位验证码public void CreateCode(){System.out.println(MyUtil.CreateCode(6));}
}
工具类代码
import java.util.Random;public class MyUtil { //专门存放需要重复使用的方法的工具类public static String CreateCode(int digit) { //验证码随机生成方法作为类方法提高复用性Random r new Random();String numbers 1234567890abcdefghijklmnopqistuvwxyzABCDEFGHIJKLMNOPQISTUVWXYZ; //字符池StringBuilder code new StringBuilder();while(digit-- ! 0){ //传入的形参控制位数code.append(numbers.charAt(r.nextInt(0, 63)));}return code.toString();}
}
测试
public class Test {public static void main(String[] args) {Demo1 d1 new Demo1();Demo2 d2 new Demo2();d1.CreateCode();d2.CreateCode();}
}
运行结果 小知识
为什么工具类中的方法要用类方法不用实例方法用实例方法当然也是可行的但是作为实例方法必须使用对象调用必须先创建类对象才能调用相关实例方法而此时对象只是为了调用方法浪费内存不如直接使用类方法因为工具类只是为了提供类方法而存在不需要创建对象所以其实可以将工具类的构造方法私有 使用类方法、实例方法时的几点注意事项
类方法中可以直接访问类变量不可以直接访问实例变量实例方法中既可以直接访问类成员也可以直接访问实例成员实例方法中可以出现this关键字类方法中不可以出现this关键字 Static修饰代码块
代码块是什么
代码块是类的五大成分之一成员变量、构造器、方法、代码块、内部类
代码块按有无Static修饰分俩种
静态代码块--格式static{ ... } --特点类加载时自动执行由于类只会加载一次所以静态代码块也只会执行一次 --作用完成类的初始化例如对类变量的初始化赋值实例代码块--格式{ ... } --特点每次创建对象时执行实例代码块并在构造器前执行 --作用和构造器一样都是用来完成对象的初始化例如对示例变量进行初始化赋值
代码演示
静态代码块
public class Block {static int age 18; //类变量static{ //静态代码块,只会在类加载时执行一次System.out.println(静态代码块被执行);}
}
测试
public class Test {public static void main(String[] args) {System.out.println(Block.age); //访问Block类的类变量会先加载Block类System.out.println(Block.age); //访问三次System.out.println(Block.age);}
}
结果 虽然访问了三次类变量但是静态代码块只在第一次访问加载时执行了一次
实例代码块
public class Block {String name; //实例变量{ //实例代码块,每次创建对象在构造器前执行一次System.out.println(实例代码块执行);}public Block() {System.out.println(无参构造器执行);}public Block(String name) {System.out.println(有参构造器执行);}
}
测试
public class Test {public static void main(String[] args) {Block b1 new Block(); //创建对象并调用无参构造器Block b2 new Block(小明); //创建对象并调用有参构造器}
} 结果 每次创建对象时都会在调用构造器之前执行一次实例代码块 虽然实例代码块可以给示例变量赋初值但是意义不大因为实例代码块不能传参所有赋初值的实例变量都是一个值所以一般不会去使用实例代码块给实例变量赋初值但是可以用实例代码块记录日志之类的比如每次有人创建对象就可以在实例代码块记录一下 Static应用单例设计模式
设计模式是什么
一个问题通常有n种解法其中肯定有一种解法时最优的这个最优的解法就是设计模式设计模式总共有23种对应各种软件开发种会遇到的问题
单例设计模式
确保一个类只有一个对象把类的构造器私有定义一个类变量记住类的一个对象定义一个类方法返回对象
代码演示
单例设计模式设计一个类
public class SingleCase {private static SingleCase s new SingleCase(); //2、定义一个类变量记住一个类对象private SingleCase(){} //1、私有类的构造器public static SingleCase getObject(){ //定义一个类方法返回类对象return s;}
}测试
public class Test {public static void main(String[] args) {
// SingleCase s new SingleCase(); 无法再通过原来的方法创建该类对象SingleCase s1 SingleCase.getObject(); //但是可以通过类方法调用类变量返回一个对象SingleCase s2 SingleCase.getObject(); //因为类变量只会在类加载的时候创建一次所以通过这种方法创建的类对象都是同一个System.out.println(s1);System.out.println(s2);}
}
运行结果 俩个类对象的地址都是一样的说明它们引用的是同一个对象
单例设计模式的应用 这是官方提供的Runtime类可以看到它就是使用的单例设计模式来设计的
比如说我们常用到的任务管理器就是单例设计模式不管启动多少次任务管理器它都只会打开那一个任务管理器。在只需要一个对象即可解决问题时就可以使用单例设计模式来设计即可以避免内存浪费
小知识 单例设计模式不止一种 像刚才代码演示的单例设计模式只是其中一种称为饿汉式单例设计模式除此之外还有懒汉式单例模式、双检索等等.......
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913819.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!