携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解* 实例方法与静态方法区别*,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
实例方法与静态方法区别
/*
关于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?
有没有参考标准。
此方法一般都是描述了一个行为,如果说该行为必须由对象去触发。
那么该方法定义为实例方法。
参考标准:
当这个方法体当中,直接访问了实例变量,这个方法一定是实例方法。
我们以后开发中,大部分情况下,如果是工具类的话,工具类当中的方法
一般都是静态的。(静态方法有一个优点,是不需要new对象,直接采用类名
调用,极其方便。工具类就是为了方便,所以工具类中的方法一般都是static的。)
什么是工具类?????
以后讲。(工具类就是为了方便编程而开发的一些类。)
类 = 属性 + 方法
属性描述的是:状态
方法描述的是:行为动作
一个方法代表了一个动作。
什么时候方法定义为实例方法?
张三考试,得分90
李四考试,得分100
不同的对象参加考试的结果不同。
我们可以认定“考试”这个行为是与对象相关的行为。
建议将“考试”这个方法定义为实例方法。
*/
public class StaticTest05{
public static void main(String[] args){
User u = new User();
System.out.println(u.getId()); //0
//User.getId();
User.printName2();
User x = new User();
x.printName1();
// 访问T的id怎么访问
/*
T t = new T();
System.out.println(t.id);
*/
User y = new User();
y.printName1();
}
}
class T{
// 实例变量
int id;
}
// 实例变量访问的语法机制是什么?
// 语法:引用.实例变量名
class User{
// 实例变量,需要对象
private int id;
// 实例变量
private String name; // 首先先分析的是,这个name是对象级别的,一个对象一份。
//分析这个方法应该定义为实例方法还是静态方法呢?
// 打印用户的名字这样的一个方法。
public void printName1(){
System.out.println(name);
}
public static void printName2(){
// 输出的是一个对象的name
//System.out.println(name);
}
public void setId(int i){
id = i;
}
public int getId(){
return id;
}
/*
public static int getId(){
return id;
}
*/
}
静态代码块
/*
1、使用static关键字可以定义:静态代码块
2、什么是静态代码块,语法是什么?
static {
java语句;
java语句;
}
3、static静态代码块在什么时候执行呢?
类加载时执行。并且只执行一次。
静态代码块有这样的特征/特点。
4、注意:静态代码块在类加载时执行,并且在main方法执行之前执行。
5、静态代码块一般是按照自上而下的顺序执行。
6、静态代码块有啥作用,有什么用?
第一:静态代码块不是那么常用。(不是每一个类当中都要写的东西。)
第二:静态代码块这种语法机制实际上是SUN公司给我们java程序员的一个特殊的时刻/时机。
这个时机叫做:类加载时机。
具体的业务:
项目经理说了:大家注意了,所有我们编写的程序中,只要是类加载了,请记录一下
类加载的日志信息(在哪年哪月哪日几时几分几秒,哪个类加载到JVM当中了)。
思考:这些记录日志的代码写到哪里呢?
写到静态代码块当中。
*/
public class StaticTest06{
// 静态代码块(特殊的时机:类加载时机。)
static {
System.out.println("A");
}
// 一个类当中可以编写多个静态代码块
static {
System.out.println("B");
}
// 入口
public static void main(String[] args){
System.out.println("Hello World!");
}
// 编写一个静态代码块
static{
System.out.println("C");
}
}
/*
运行结果:
A
B
C
Hello World!
*/
实例语句块
/*
1、除了静态代码块之外,还有一种语句块叫做:实例语句块
2、实例语句在类加载是并没有执行。
3、实例语句语法?
{
java语句;
java语句;
java语句;
}
4、实例语句块在什么时候执行?
只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句块”中的代码。
实际上这也是SUN公司为java程序员准备一个特殊的时机,叫做对象构建时机。
*/
public class InstanceCode{
//入口
public static void main(String[] args){
System.out.println("main begin");
new InstanceCode();
new InstanceCode();
new InstanceCode("abc");
new InstanceCode("xyz");
}
//实例语句块
{
System.out.println("实例语句块执行!");
}
// Constructor
public InstanceCode(){
System.out.println("无参数构造方法");
}
// Constructor
public InstanceCode(String name){
System.out.println("有参数的构造方法");
}
}