文章目录
面向过程和面向对象的理解
- 面向过程:强调功能行为,以函数为最小单位,考虑怎么做。
- 面向对象:强调了具备功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象的两个要素
类
对一类事物的描述,是抽象的、概念上的定义;
对象
是实际存在的该类事物的每个个体,因此也称为实例(instance)
- 面向对象程序设计的重点是类的设计;
- 设计类,就是设计类的成员;
设计类,就是设计类的成员
- 属性:成员变量
//属性
String name;
int age=1;
boolean isMale;
- 方法:成员方法
//方法
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
- 创建类的对象:是类的实例化、实例化类
Person person=new Person();
对象的创建和使用:内存解析
- 堆:存放对象实例;
- 栈:存储局部变量;
- 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。
属性(成员变量)和局部变量的异同
相同点
- 定义变量的格式相同:数据类型 变量名 = 变量值
- 先声明,后使用
- 变量都有其对应的作用域
不同点
- 在类中声明的位置不同;
属性:直接定义在类的一对{}内;
局部变量:声明在方法、方法形参、代码块内、构造器形参、构造器内部的变量 - 权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符;
常用的权限修饰符:private、public、缺省、protected;
局部变量:不可以使用权限修饰符; - 默认初始化情况
属性:类的属性,根据其类型,都有默认初始化值;
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0(或\u000)
布尔型(boolean):false
引入数据类型(类、数组、接口):null
局部变量:没有默认初始化值。
在调用局部变量前,一定要显式赋值;特别的,在形参调用时,我们赋值即可。 - 在内存中加载的位置
属性:非static属性加载到堆空间中,static属性加载到方法区;
局部变量:加载到栈空间中。
方法重载
可变个数形参
public class MethodsArgsTest {
public void show(int i){
System.out.println("show :\t"+i);
}
public void show(String s){
System.out.println("show :\t"+s);
}
//可变个数形参
public void show(String ... strs){
System.out.println("show strs :\t"+strs);
}
//可变个数形参只能放在最后
public void show(int i,String ... strs){
System.out.println("show i :\t"+i+"\t+show strs");
}
public static void main(String[] args) {
MethodsArgsTest test=new MethodsArgsTest();
test.show(23);
test.show("RRR");
test.show("RRR","566","EER");
test.show(123,"dddd","522");
}
}
变量的赋值
基本数据类型
- 赋值的是变量所保存的数据值;
int m=10;
int n=m;
System.out.println("m = "+m+" , n = "+n);
n=20;
System.out.println("m = "+m+" , n = "+n);
返回结果为:n修改成功,m没有修改。
m = 10 , n = 10
m = 10 , n = 20
引用数据类型
- 赋值的是变量所保存的数据的地址值;
Order order1=new Order();
order1.orderId=1001;
Order order2=order1;
System.out.println("order1.orderid = "+order1.orderId+" , order1.orderid = "+order2.orderId);
order2.orderId=1003;
System.out.println("order1.orderid = "+order2.orderId+" , order1.orderid = "+order2.orderId);
返回结果为:order1.orderid和order2.orderid的值都修改了。
order1.orderid = 1001 , order2.orderid = 1001
order1.orderid = 1003 , order2.orderid = 1003
递归方法
- 方法递归注意事项
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出现象。
public class RecursionTest {
public int getSum(int n){
if(n==1){
return 1;
}else {
return n+getSum(n-1);
}
}
public static void main(String[] args) {
int n=100;
RecursionTest test=new RecursionTest();
System.out.println(test.getSum(n));
}
}