第一讲 类与对象
1.万物皆对象
2.二者的关系:
3.其定义规则
属性 + 方法
案例:
public class People{
//属性
public String name;//姓名
public char sex;//性别
public int age;//年龄
//方法
public void tell(){
System.out.println("Hello World!");
}
public void say(){
System.out.println("我叫:"+name+",我的性别:"+sex+",我的年龄:"+age);
}
}
4.对象的使用(对象可以通过 . 来访问自己的属性和方法)
eg: p.name = “小明”;//访问属性
p.sex = ‘男’;//访问属性
p.age = 15;//访问属性
p.tell();//访问方法
p.say();//访问方法
体积案例:
public class Rec{
//属性
public int length;
public int width;
public int height;
//方法
public void getV(){
System.out.println("体积="+(length*width*height));
}
public static void main(String[] args){
Rec r1 = new Rec();
r1.length=10;
r1.width=5;
r1.height=15;
r1.getV();
Rec r2 = new Rec();
r2.length=15;
r2.width=10;
r2.height=20;
r2.getV();
}
}
5.内存分析
我找了一个经典案例,这个比较综合
第二讲 方法
方法:类似于数学中的函数,就是一段完成一定功能的代码的集合。
作用:简化代码,提高代码的可读性,有利于代码间的共享。
下面是我总结的一些方法,可以做下参考:
总结:定义方法时,需不需要修饰符,需不需要返回值,需不需要参数列表,都是根据情况而定,我们自己可以控制,怎样简单就怎样进行。
一、 方法调用
调用方法时,必须使用类或者对象作为调用者,及必使用 “类.方法” 或者 “对象.方法”。
静态方法和普通方法:
▲如果方法前面加了修饰符“static”,代表该方法是静态方法,静态方法属于类。调用静态方法时可以使用类来调用,也可以使用对象来调用,如果前面没有指明调用则默认为当前类调用。
案例:
▲如果方法前面没有加修饰符“static”,代表该方法是普通方法,普通方法属于对象。在静态方法中调用普通方法只能使用对象调用;在普通方法中调用普通方法 可以使用对象调用,可以使用this调用,也可以直接调用(默认缺省this,this就是指的当前对象)。
返回值:
▲如果方法有返回值,调用方法时可以定义相应类型的变量接收,或者直接输出。
▲如果方法没有返回值,直接调用即可。
参数:
▲如果方法有参数,调用方法时传入相应类型的参数即可
▲如果方法没有参数,直接调用即可。
总结:
调用方法时 三看:
第一看 有没有static。
有:是静态方法 类.方法 对象.方法 方法(默认缺省类名)
没有:普通方法
1.静态方法中调 对象.方法
2.普通方法中调 对象.方法 this.方法 方法(默认缺省this)
第二看 有没有返回值。
没有: 正常调用
有: 定义相应类型变量接收
直接输出
第三看 有没有参数。
没有:正常调用
有:传入相应类型变量
二、 方法的参数传递
形参(形式参数):定义方法时,方法的参数列表中的参数。
实参(实际参数):调用方法时,传递给形参的值就是实参。
î
Java中参数的传递只有一种方式(值传递):
Ø 传递实际值
Ø 传递地址值
案例一:传递实际值
值传递(实际值):实际上就是把实参的副本(复制品)传给形参,无论形参怎么变化,实参自身不受影响。
案例二:传递地址值
值传递(地址值):实际上就是把实参的副本(复制品)传给形参,但是此处的值是地址值,所以形参的变化会影响实参一起变化。
三、 方法重载
Java中同一类中允许定义多个同名的方法,只要这些方法参数列表不同即可(类型,个数),这就叫方法重载。
!!!注意:下面不是重载
四、 方法的递归调用(了解 拓展)
思考:
有五个小朋友,老师问第一个小朋友多少岁,他说比第二个大2岁,
老师问第二个小朋友多少岁,他说比第三个大2岁,
老师问第三个小朋友多少岁,他说比第四个大2岁,
老师问第四个小朋友多少岁,他说比第五个大2岁,
老师问第五个小朋友多少岁,他说10岁。
public class Demo{
public static int getAge(int x){
int age;
if(x==1){
age = 10;
}else{
age = getAge(x-1)+2;
}
return age;
}
public static void main(String[] args){
int age = getAge(3);
System.out.println(age);
}
}
第三讲 构造方法
作用:
我用案例做下比较,这样比较直观
没有自定义构造方法
有自定义构造方法
构造方法的特点 (一定要牢记)
▼1.构造方法名必须和类名一致
public People(String name,char sex,int age){//构造方法名必须和类名一致
this.name = name;
this.sex = sex;
this.age = age;
}
▼2.构造方法没有返回值,也不能写void
▼3.构造方法不能被程序员显示的直接调用
public static void main(String[] args) {
People p = new People("李天鹏",'男',17);
p.tell();
p.People("李天鹏",'男',17);//报错
}
▼4.Java语言中,每个类至少有一个构造方法。(如果没有构造方法,则不能创建对象)
▼5.如果类的定义者没有显示的定义任何构造方法,则Java编译器会自动为该类提供一个默认为空的构造方法。(没有参数列表,没有方法体)
Eg:
public People(){
}
▼6.如果类的定义者显示定义了一个或多个构造方法,则系统不再提供默认为空的构造方法。
public class People {
public String name;
public char sex;
public int age;
public People(String name,char sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public void tell(){
System.out.println("我叫:"+name+",性别:"+sex+",年龄:"+age);
}
public static void main(String[] args) {
People p = new People("李天鹏",'男',17);
p.tell();
People p = new People();//报错,程序员自己定义了一个构造方法,则系统不再提供为空的。
构造方法的重载
方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(overloading)
Java编译器能根据调用方法时所传递的参数个数和类型选择相应的方法。
构造方法的调用
在一个构造方法中调用另外一个构造方法,不是使用构造方法名,而是使用this(参数)的形式。
注意:
在一个构造方法中调用另一个构造方法,this(参数)必须位于第一行。
不能再够方法以为的任何地方调用构造方法
在一个构造方法中最多只能使用一个this调用一个构造方法。
第四讲 成员变量与局部变量
在Java语言中,根据变量的位置的不同,可以将变量分为两大类:
成员变量局部变量
Java中的内存空间:栈、堆、全局数据区、全局代码区
栈:基本数据类型、引用类型的地址
堆:引用类型的真实值(数组的值、对象的属性)
全局数据区:类属性(加了static的属性)
成员变量
★在类的范围里面定义的变量就是成员变量(成员变量就是属性,也可以叫成员属性)
成员变量分为两类:
●类属性: ●实例属性:
在定义一个属性时如果使用static修饰,则就是类属性;如果没有使用static修饰,则就是实例属性(实例就是对象)
访问类属性可以使用 类.属性 也可以使用 对象.属性
访问实例属性可以使用 实例.属性
类属性和实例属性的区别:类属性保存在全局数据区,实例属性保存在堆中。
局部变量
★在方法的范围里面定义的变量就是局部变量
局部变量分为三类:
●形参:整个方法中有效
●方法局部变量:在方法中,从定义开始到方法结束
●代码块局部变量:在代码块中,从定义开始到代码块结束
案例:
总结:局部变量与成员变量的区别
1. 定义变量的位置不同 局部变量在方法中 成员变量在类中
2. 保存变量的位置不同 局部变量在栈中 成员变量在堆和全局数据区中
局部变量(除了形参)必须要初始化才能使用 成员变量可以不用初始化系统会提供默认值
最后我画了一个图来表示他们的关系