原视频地址:【零基础 快速学Java】韩顺平 零基础30天学会Java
Java基础-面向对象编程
对象内存布局![](https://i-blog.csdnimg.cn/direct/9a112ed0967f47a0b202d326ee28aecb.png)
这里的12是基本数据类型,字符串是引用类型,所以在内存中的存在形式不同
类与对象
属性/成员变量
- 成员变量 = 属性 = field字段
- 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象、数组)
属性的注意细节
- 访问修饰符 属性类型 属性名;(四种访问修饰符:public,proctected,默认,private)
- 属性的定义类型可以为任意类型
- 如果不赋值,有默认值,规则和数组一致
方法
- 方法(成员方法),在类里面定义方法
- 方法写好后,如果不去调用,不会执行代码;需要创建对象,然后调用方法
public class hello01 {
public static void main(String[] args) {
Person p1 = new Person();//创建对象
p1.speak();//使用speak这个方法
}
}
class Person {
String name;
int age;
//public表示方法公开
//void是空的意思,没有返回值
//speak是方法名,()是形参列表
//{}里面是方法体,调用方法时会执行里面的代码
public void speak() {
System.out.println("我是一个好人");
}
}
利用方法传入参数
public class hello01 {
public static void main(String[] args) {
Person p1 = new Person();
p1.cal(5);
}
}
class Person {
String name;
int age;
public void cal(int n) {
int res = 0;
for(int i = 1; i <= n; i++){
res += i;
}
System.out.println(res);
}
}
利用方法完成两数相加
public class hello01 {
public static void main(String[] args) {
Person p1 = new Person();
int returnRes = p1.sum(5,13);
System.out.println(returnRes);
}
}
class Person {
String name;
int age;
public int sum(int num1,int num2){
int res = num1 + num2;
return res;
}
}
**方法在内存中的调用机制![](https://i-blog.csdnimg.cn/direct/d418f67e743446a99d845e8d2a9181c7.png)
- ①执行完后在堆生成一个对象
- ③执行完后在栈中单独开辟一个getsum空间
- 执行到⑥时,res会返回给returnRes,然后将getSum栈释放掉
方法调用小结
1.当程序执行到方法时,就会开辟一个独立的空间(栈空间)
2.当方法执行完毕,或者执行到return语句时,就会返回,
3.返回到调用方法的地方
4.返回后,继续执行方法后面的代码
5.当main方法(栈) 执行完毕,整个程序退出
方法的定义
public 返回数据类型 方法名 (形参列表){//方法体
语句;
return 返回值;
}
-
形参列表:表示成员方法输入(给调用的时候提供指导 ---理解)
-
返回数据类型:void表示没有返回值
-
return语句不是必须的
方法use detail--访问修饰符(后续会有详解)
访问修饰符作用就是控制 方法使用的范围
类型分为:public protected 默认 private
方法use detail--返回数据类型
-
一个方法最多有一个返回值(如果需要多个返回可以用数组)
public class hello01 { public static void main(String[] args) { AA a = new AA(); int[] res = a.getSumAndSub(1,4); System.out.println("和=" + res[0]); System.out.println("差=" + res[1]); } } class AA{ public int[] getSumAndSub(int n1, int n2){ int[] resArr = new int[2]; resArr[0] = n1 + n2; resArr[1] = n1 - n2; return resArr; } }
-
返回类型可以为任意类型,包含基本类型或引用类型(数组、对象)
-
如果方法要求有返回数据类型,那么方法体最后执行的语句必须为return 值
-
如果方法是void,则方法体中可以没有return语句,或者只写return
-
之一返回值类型和return值类型一致 或者兼容(满足数据类型的精度要求)
方法use detail--形参列表
-
一个方法可以有0个参数,也可以有多个参数,中间逗号隔开 例如:getSum(int n1,int n2)
-
参数类型可以为任意类型,包括基本数据类型或引用数据类型
-
调用带参数的方法时候,注意传入类型的类型一致 或者兼容(满足数据类型的精度要求)
-
方法定义时的参数为形式参数,简称形参;方法调用时的传入的参数为实际参数,简称实参(注意类型一致、兼容,个数,顺序一致)
方法use detail--调用
-
同一个类中的方法调用:直接调用
public class hello01 { public static void main(String[] args) { AA a = new AA(); a.ok(); } } class AA{ public void print(int n){ System.out.println("打印出一个整数=" + n); } public void ok(){ print(10); System.out.println("继续执行吧"); } }
-
跨类中的方法调用:需要通过对象名调用
public class hello01 { public static void main(String[] args) { BB b = new BB(); b.hi(); } } class AA{ public void print(int n){ System.out.println("打印出一个整数=" + n); } public void ok(){ print(10); System.out.println("继续执行吧"); } } class BB{ //关键看这边 public void hi(){ System.out.println("我是BB的hi哦"); AA a = new AA(); a.print(20); } }