🔭学习内容
掌握this关键字的作用,并可以使用this关键字完成对象的比较操作。
掌握static关键字,并可以阐述出static属性及static方法的特点。
掌握主方法的组成及运行时的参数传递。
掌握Java中的普通代码块、构造块、静态块3种代码块的使用方法
✈️目录
🔭1、this关键字
🎬作用:
(1)使用this强调本类中的方法
(2)表示类中的属性
(3)可以使用this调用本类的构造方法
(4)this表示当前对象
🔭2、static关键字
🎬作用:
(1)使用static声明属性
(2)static声明方法
🎬应用:
🎬main方法:
🔭3、代码块
🎬三种代码块:
(1)普通代码块
(2)构造块
(3)静态代码块
🔭1、this关键字
🎬作用:
(1)使用this强调本类中的方法
this.getName();
(2)表示类中的属性
this.name=name;// 明确表示为类中name属性赋值 this.age=age;
(3)可以使用this调用本类的构造方法
this();//调用类中的无参构造方法
使用this调用构造方法必须也只能放在构造方法的第1行,this调用构造方法时一定要留一个构造方法作为出口,即程序中至少存在一个构造方法不使用this调用其他构造方法。
(4)this表示当前对象
在一个类之中肯定会产生诺干个对象,那么程序类在分辨的时候不会记住具体有多少个对象产生了,它唯一可能知道的当前操作本类的对象是哪一个。
❄️范例:
class Person{ public String A() { System.out.println("Person类-->"+this); return null; } } public class Demo { public static void main(String args[]) { Person p1=new Person(); System.out.println("Main方法-->"+p1); p1.A();//由p1这个对象调用了A()方法(this=p1) System.out.println(" "); Person p2=new Person(); p2.A(); } }
❄️运行结果:
Main方法–>Person@1b6d3586 Person类–>Person@1b6d3586 Person类–>Person@4554617c
哪个对象调用了本类中的方法,那么这个this就表示当前执行的对象。
🔭2、static关键字
如果一个类中的方法想由类调用,则可以声明为static 方法
🎬作用:
(1)使用static声明属性
如果在程序中使用static声明属性,则此属性称为全局属性(有些也称为静态属性),访问形式是:类名.静态成员名。
static String str=“Hello”;
static关键不能修饰局部变量,包括实例方法和静态方法
🔎注意:Java中常用的内存区域
(1)栈内存空间:保存所有的对象称(更准确地说是保存了引用的堆内存空间的地址)。
(2)堆内存空间:保存每个对象的具体属性内容。
(3)全局数据区:保存static类型的属性。
(4)全局代码区:保存所有的方法定义.
(2)static声明方法
用它声明的方法被称为静态方法,有时也被称为“类方法”,访问形式是:类名.方法名调用
public static String getCountry(){ return country; }
🔎说明:非static声明的方法可以去调用static声明的属性或方法。但是static声明的方法是不能调用非static类型声明的属性或方法的。
static关键字不能修饰普通类,但可以用static关键字修饰内部类使其变成静态内部类。static关键字本身的含义就是共享,而Java类加载到JVM内存的方法区,也是线程共享的,所以没必要用static关键字修饰普通类。
🎬应用:
❄️范例:统计一个类产生了多少个实例化对象。
❄️代码如下:
class Demo1{ private static int count=0;// 所有对象共享此属性 public Demo1(){ count++; System.out.println("产生了"+count+"个对象1"); } } public class Test { public static void main(String[] args){ new Demo1(); new Demo1(); new Demo1(); } }
❄️运行结果:
产生了1个对象! 产生了2个对象! 产生了3个对象!
只要一有实例化对象产生,则一定会调用其中的构造方法,所以在构造方法中将static属性进行自增,这样就能够计算出一个类中到底有多少个实例化对象。
🎬main方法:
❄️主方法每个参数的含义:
- public:表示此方法可以被外部调用。
- static:表示此方法可以由类名称直接调用。
- void:主方法是程序的起点,所以不需要任何的返回值。
- main:系统规定好默认调用的方法名称,执行时默认找到main方法名称。
- String args[]:表示的是运行时的参数。参数传递的形式为"Java类名称 参数1 参数2 参数3 …"
❄️范例:验证参数传递,输入的必须是3个参数,否则程序退出。
❄️代码如下:
public class Demo { public static void main(String[] args){ if(args.length!=3){ System.out.println("参数不足3个,程序退出!"); System.exit(1); } for (int i=0;i<args.length;i++){ System.out.println("第"+(i+1)+"个参数:"+args[i]); } } }
❄️程序执行命令:
java Demo one two three
❄️程序运行结果:
第1个参数:one 第2个参数:two 第3个参数:three
🔭3、代码块
所谓的代码块是指使用“ { } "括起来的一段代码,根据位置不同,代码块可以分为普通代码块、构造块、静态代码块、同步代码块4种,本次我们将学习前三种,同步代码块将在后边学习。
🎬三种代码块:
(1)普通代码块
就是指直接在方法或是语句中定义的代码块,如下面代码。
public class Demo { public static void main(String[] args){ int x=30; System.out.println(x); } }
(2)构造块
构造代码块是直接写在类中的代码块。
class Demo{ { System.out.println(“构造块”); } public Demo(){ System.out.println(“构造方法”); } public class Test { public static void main(String[] args){ new=Demo(); } }
❄️运行结果:
构造块 构造方法
构造块优先于构造方法执行,而且每次实例化对象时都会执行构造块中的代码,会执行多次。
(3)静态代码块
静态代码块是使用static关键字声明的代码块。
class Demo{ { System.out.println(“1、构造块”); } static{ System.out.println(“0、静态代码块”); } public Demo(){ System.out.println(“2、构造方法”); } public class Test { static{ System.out.println(“在主方法所在类中的静态代码块”); } public static void main(String[] args){ new=Demo(); new=Demo(); new=Demo(); } }
❄️运行结果:
在主方法所在类中的静态代码块 o、静态代码块 1、构造块 2、构造方法 1、构造块 2、构造方法 1、构造块 2、构造方法
可以看出,静态代码块优先于主方法执行,而在类中定义的静态代码块会优先于构造块执行,而且不管有多少个对象产生,静态代码块只执行一次。