回顾:
1、何为对象?
世界万物皆对象
现实生活中真实存在的个体,
具备静态的特征和动态的行为。
2、何为类?
具有相似特征、相同行为的一群对象的总称,
归成一类(类别、类型)。
3、java中,如何创建类?
创建一个java源文件,将归类的名字
写成源文件的名字(类名)。
对象特征 以类的属性(成员变量)写在类体中。
对象行为 以类的方法写在类体中。
练习:
1、描述出教室中对象。
2、用java代码编写出汽车类。
正课:
1、类与对象
1)、何为对象何为类?
2)、如何创建java类?
3)、如何创建java对象?
创建对象的语法:
通过new的方式来创建对象:
类型 引用 = new 类型();
4)、类与对象总结
a、世界万物皆对象。
b、现实生活中先有对象,再归类。
java中先有类,再创建对象。
c、类是对象的模板,对象是类的实体。
d、一个类可以创建多个对象,
多个对象可以归成一类。
e、对象的特征对应成类的属性,
对象的行为对应成类的方法。
5)、类的属性赋值、方法调用
前提:先创建对象
a、属性赋值、使用
通过引用点属性名的形式来赋值和使用。
引用.属性名 = 属性值;
System.out.println(引用.属性名);
b、方法的调用
通过引用点方法名的形式对类中的非静态方法的调用。
引用.方法名([参数]);//无返回值
返回值类型 变量名 = 引用.方法名([参数]);//有返回值
2、this关键字
1)、站在类内看this
this:本类的,可以省略
this.属性名
this.方法名
>注意:static修饰的静态方法中,
不可以使用this关键字。
因为static是属于类的,this是本类的。
两者同时使用是矛盾的。
2)、站在类外看this
this:谁调用代表谁。
3、方法重载
1)、定义
在一个类中,当方法名相同,参数列表不同的时候。
可是实现不同功能的方法体。
这种方法的定义被称为:方法的重载!
方法重载的要求:
a、一个类中。
b、方法名相同。
c、参数列表不同。
2)、重载方法的调用
无需关心重载之后的方法怎么调用。
只需将参数传对即可。
java虚拟机,会自动的对参数进行校验,
判断传入的参数与方法参数类型相匹配,
则会自动调用对应方法。
练习:你用代码来实现 + 重载的原理。
public 返回值类型 add(参数列表){
方法体
}
+
+号两边,如果都是数字,就是加法运算。
+号两边,如果有一边非数字,就是拼接效果。
null和NullPointerException
null : 空
a、引用没有创建对象
b、对象创建,引用类型属性未赋值值
NullPointerException : 空指针异常
空指针的出现只有一个原因:
遇到了 null.变量名\null.方法名();
解决方法,请参考以前笔记。
2、基本类型变量赋值、引用类型变量赋值区别?
```基本类型变量赋值
int number1 = 100;//变量定义(声明、初始化)
int number2 = number1;
System.out.println("number1:"+number1);//100
System.out.println("number2:"+number2);//100
number1 = 200;//变量再次赋值
System.out.println("number1:"+number1);//200
System.out.println("number2:"+number2);//100
People peo1 = new People();
peo1.name = "张三";
People peo2 = peo1;
System.out.println("peo1姓名:"+peo1.name);//张三
System.out.println("peo2姓名:"+peo2.name);//张三
peo1.name = "李四";
System.out.println("peo1姓名:"+peo1.name);//李四
System.out.println("peo2姓名:"+peo2.name);//李四
3、java在内存中的堆栈关系
1)、栈
栈中存放临时变量。
临时变量:写在方法中的变量,
生命周期:方法调用开始、方法调用完毕结束。
a、基本类型变量
存放变量类型、变量名和变量值。
int number1 = 100;
int number2 = number1;//即int number2 = 100;
b、引用类型变量
存放引用类型、引用名和引用地址
ps:引用的是堆中对象的指向地址
People peo1 = 0x1111;
People peo2 = peo1;//即将peo1的地址赋给peo2
2)、堆
堆中存放完整的对象信息。
对象创建、对象的属性赋值。
当创建一个对象,则会在堆中分配一块内存空间。
3)、方法区
方法区存放完整的类信息。
类名、方法信息、静态属性信息、静态块(只能执行一次)。
注:方法区中的东西只有一份,但是可以多次调用。
4、构造方法
用途:
a、创建对象
b、成员变量初始化
参数名与属性名不同,
this.属性 = 参数名;//this可以省略
参数名与属性相同,
this.属性 = 参数名;//this不可以省略
1)、构造方法语法
a、无参构造
public 类名(){
}
注意:没有返回值类型,连void都没有。
b、有参构造
public 类名(参数列表){
}
注意:
1、如果不写任何构造方法,系统会自动给类
创建一个默认的隐含的无参构造。
2、如果手动写了构造,则系统不会自动添加无参构造。
建议,只要手写构造,最好加上无参构造。
(**ps:除非要求创建对象时,必须给属性初始化,
这种情况可以不写无参构造。**)
3、如果类有N个属性,总共最多能有 2^N 个构造:
无参构造有且只有一个,
有参构造最多有 2^N - 1个。
补充:
类的属性、全局变量、局部变量
变量:
全局变量、局部变量
1)、全局(成员)变量
直接定义在类体中变量,称为全局(成员)变量。
其作用域为整个类体。
都有默认初始化(初始值)。
2)、局部变量
定义在局部(方法体、静态块)的变量。
必须手动初始化。
3)、属性
属性 = 全局变量
全局变量 ≠ 属性
全局变量 > 属性。