面向对象编程
类和对象的概念
对象:是指一个具体的事物,它有自己的属性和行为;
类:是对同一种事物的抽象,把它们共有的属性和行为抽离出来,就是类;
方法区:类的描述信息(成员变量和成员方法),.class文件内容;中间有一个静态区域,包含静态方法和静态变量;
栈:即方法栈,由两个名词,压栈(push)、弹栈(pop),局部变量所在区域;
堆:new出来的对象存放区域;
Student stu = new Student()的创建过程:
1、首先在栈空间中为变量stu开辟一个空间;
2、在堆空间中为新创建的对象开辟一个空间;
3、系统为新创建的对象的变量进行默认初始化;
4、对象初始化完成后,把对象的地址赋值给变量stu;
实例变量和局部变量
实例变量:定义在类体中、方法外的变量;
局部变量:属于方法的变量,只在方法内或方法声明上(形参);
存放位置
实例变量:堆内存中,属于对象;
局部变量:栈内,属于方法;
初始值
实例变量:有默认的初始值(0、false、null);
局部变量:没有默认的初始值,必须先定义、赋值,才能使用;
形式参数
基本类型作为形式参数:传值,实际上就是把拷贝一份给形参,形参不论怎么改动,都不影响实参的值;
引用类型作为形式参数:传递的是实参所指向的实例对象或数组,即:传递的是实参的引用(地址值),形参和实参具有相同的引用,所以,形参对应用的改动能立即从实参上看到;
匿名对象
匿名对象,就是没有名字的对象,是对象的一种简化表现形式。
使用情况: 对象调用方法仅仅一次的时候,多次调用的时候,不适合用匿名对象; 作为实际参数传递可以使用匿名对象。
封装
概念:面向对象编程的三个特征之一(封装、继承、多态)。
指隐藏对象的属性和实现细节(private修饰),不允许外部直接访问对象的内部信息,而是通过类提供的方法来实现对内部信息的访问,把方法暴露出来public修饰的get()、set()方法),让方法来控制对这些成员变量进行安全的访问和操作。即把变量和方法用private进行修饰。
好处:
1、让使用者只能通过实现预定的方法来访问数据,从而可以在这个方法内加入逻辑控制,限制对成员变量的不好访问;
2、可以进行数据检查,从而有利于包装对象信息的完整性;
3、隐藏实现细节;
4、便于修改,提高代码的可维护性
案例:
1 /** 2 定义一个长方形类rectangle,定义求周长girth和面积area的方法,然后定义一个测试类Test2,进行测试 3 从键盘接收长和宽 4 */ 5 import java.util.Scanner; 6 class Rectangle{ 7 private int length; 8 private int width; 9 //set长 10 public void setLength(int len){ 11 length=len; 12 } 13 public void setWidth(int wid){ 14 width=wid; 15 } 16 //求长方形周长 17 public int getGirth(){ 18 return 2*(length+width); 19 } 20 //求长方形面积 21 public int getArea(){ 22 return length*width; 23 } 24 25 } 26 class GetRectangleDemo{ 27 public static void main(String[] args){ 28 29 //创建扫描对象 30 Scanner s=new Scanner(System.in); 31 //提示用户输入长度 32 System.out.println("请输入长方形的长:"); 33 int length=s.nextInt(); 34 //提示用户输入宽? 35 System.out.println("请输入长方形的宽:"); 36 int width=s.nextInt(); 37 Rectangle rec=new Rectangle(); 38 rec.setLength(20); 39 rec.setWidth(10); 40 System.out.println("长方形的周长是:"+rec.getGirth()+" "+"长方形的面积是:"+rec.getArea()); 41 } 42 43 }