1.区别
面向过程
优点:容易理解
缺点:代码量越大越难维护
面向对象:
优点:可扩展性强,易维护
缺点:复杂,难理解
2.this关键字
(以下例子和部分截图均来自B站“老男孩IT教育”的视频)
- main方法中默认把类的实例化对象传给了实例方法(run),在实例方法(run)中用this表示,打印对象c的地址和实例方法中打印this的地址是相同的。如下:
- 另外注意点:先赋值实例变量再调用方法?和?先调用方法再给实例变量赋值?结果是不一样的(效果如下图)。
- 所以,想明确调用实例变量时,应该得加上this更好,代码可读性也更好(易于区分局部变量和实例变量)
- 另外,如果方法中不定义局部变量,而是在参数中传过来一个跟实例变量同名的变量,没有this时,则这个变量调用的是参数中的变量。(但是加上this的话他就是指向实例变量)
3.构造方法
3.1新建构造方法
(用alt+insert?可以选择有参,无参构造方法)
实例化对象时(new 的时候)自动调用的方法
3.2语法特点:
public 同类名(传参(实例变量)){
? this.实例变量 = 参数;
? ...
}
3.3小提示:
(只有构造方法的public之后是不用指定返回类型的)
? java会自动为每个类建一个看不到的无参构造方法(只有编译之后打开class文件才能看到),如果自己建了一个有参构造方法,在new一个对象时,java则不会帮我们新建无参构造方法,可以自己手动创建。
3.4 重载,this()
4.static
4.1使用
- 用static修饰的变量是类变量,修饰的方法就是类方法,修饰之后虽然可以用该类的对象来调用,修改其值,但是一般用?类名. 变量名/方法?来调用。(类名.变量名/方法 不能调用非static,会报错)
- tip:它在类加载的时候最先加载,所以它的加载会先于new类对象的加载
4.2总结static的特点
-
数据共享,每个类对象都共用同一个static修饰的类变量/方法, -
属于类,不属于对象 -
优先于非static变量/方法的加载,所以也优先于对象的产生。 -
static(static方法/static代码块/main方法)中都不能用"this." 来调用变量/方法 -
在实例化一个类对象时以下三者的加载顺序: ①先加载static静态代码块(静态构造器) 、静态方法、静态变量 ②再加载匿名代码块(通用构造器),如下格式:
{
? ...(代码)...
}
③后加载构造方法。 tip:①在类加载全过程只执行一次,②和③会在每次new一个对象时执行。(效果如下图控制台输出)
- 因此,在static(静态)的代码块/方法(包括main方法)中不能调用this.非static的部分。(因为"this"关键字是在加载非静态资源的时候才有的,所以在还没加载出来的时候就去调用它肯定会报错)
(在method2中则可以通过 类名.method1()或者 this.method1()或者method1()调用method1)
- 若想在本类中调用static方法,可以直接写方法名,省略"this." 或者 "类名." ,但是想在其他类中的方法调用该类的static方法,则需要在其他类的方法中调用时加上该类的 "类名."(前提是方法有public修饰) 。所以,为了统一,一般在自己类调用自己的static方法时也用"类名." 或者"this."。
因为疏忽,上图的
public static void method1(){
method1();
}
会导致无限递归,不能这样写。
5 持续更新中。。。
|