一、面向对象的思想、重载和构造函数、this关键字的使用
/*
-----------------------------------面向对象-----------------------------------------
什么的对象?
1、面向对象的一种编程方法。
2、面向对象是一种思维方式。
3、面向对数不是一种编程语言。
面向对象的三大特点:封装、继承和多态。
应该如何学习面向对象?
1、掌握一门面向对象语言的语法。
2、掌握面向对象的思维方式。
3、属性面向对象的设计原则。
4、掌握面向对象的设计模式。
面向对象的终极目标:消除程序中的重复代码。
什么是面向对象的思维方法?
1、首先确定谁来做,其次确定怎么做。
2、首先考虑整体,其次考虑局部。
3、首先考虑抽象,其次考虑具体。
----------------------------------重载和构造函数--------------------------------------------
重载的定义:(overload)
1、两个或者多个函数在同一个类当中。
2、函数名相同。
3、参数列表不同
4、重载与返回值类型无关。
什么时候使用重载:函数功能相同,但参与运算的未知内容不同,就使用重载。
构造函数的作用:
1、构造函数的函数名必须与类名相同。
2、构造函数没有返回值类型的定义。
3、使用new来调用构造函数。
4、如果类里面没有构造函数,编译器会自动添加一个参数为空,方法体也为空的构造函数。
5、如果类里面已经有构造函数了,编译器不再添加构造函数。
构造函数与一般函数的比较:
1、写法上不同。
2、运行上不同:
1、构造函数是在对象一建立就运行,给对象初始化,而一般函数在调用时才开始运行。
2、一个对象建立,构造函数只执行一次,而方法可以被对象调用多次。
什么时候定义构造函数?
当分析事物时,该事物具备一些特性或者行为,那么将这些内容定义在构造函数中。
注意:一个类中默认会有一个空参数的构造函数,这个默认构造函数的权限和所属类一致,如果类被public修饰,
那么默认的构造函数也带public修饰符,如果没有,默认构造函数也没有。
构造代码块:
作用:给对象初始化,对象一建立就运行,而且优先于构造函数执行。
与构造函数区别:
构造代码块是给所以对象进行统一初始化,而构造函数的给对应对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
举例:Person p = new Person("zhangsan",20);执行这句语句时计算机都做了什么?
1、因为new用到了Person.class,因此先找到Person.class类并加载到内存中。
2、执行该类中static代码块,分配内存地址。
3、在堆内存中开辟空间,分配内存地址。
4、在堆内存中建立对象特有属性,并进行默认初始化。(属性值为null或者为0)
5、对属性进行显示初始化。(对属性赋值)
6、对对象进行构造代码块初始化。
7、对对象进行对应的构造函数初始化。
8、将内存地址赋给栈内存中的变量p。
静态代码块、构造代码块、构造函数的作用:
静态代码块是给类进行初始化的。
构造代码块是给对象进行初始化的。
构造函数是给对应对象进行初始化的。
-----------------------this关键字----------------------------------------------
1、this代表当前对象。
2、不能放在静态方法里面。
3、当局部变量和成员变量(全局变量)重名时,如果想访问成员变量时,用this.成员变量。
4、this调用构造方法时,需要放在构造方法内的第一行。
*/
/*
变量的范围:
1、全局变量:类内部、方法的外部。全局变量有默认值,类加载时会自动初始化
2、局部变量:方法内部。没有默认值,要使用时,必须初始化
*/
public class TestRang {
static byte b1;
static char c1;
static short s1;
static int i1;
static long l1;
static float f1;
static double d1;
static boolean b;
static String s;//
public static void main(String[] args){
System.out.println("byte:" + b1);
System.out.println("char:" + c1);
System.out.println("short:" + s1);
System.out.println("int:" + i1);
System.out.println("long:" + l1);
System.out.println("float:" + f1);
System.out.println("double:" + d1);
System.out.println("boolean:" + b);
System.out.println("String:" + s);
}
/*
* 打印结果:
byte:0
char:
short:0
int:0
long:0
float:0.0
double:0.0
boolean:false
String:null
*/
}