不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础(面向对象)
思想概述:
类:抽象概念的人
对象:实实在在具体的某个人
面向对象程序设计的重点:类的设计。
常见的类的成员:
- 属性:类中的成员变量(一个人的年龄、姓名等)
- 行为:类中的成员方法(一个人具有的行为,走路、游泳等)
Java中类是一个独立的结构体,使用 class 来进行定义,在类中主要由 属性 和 方法 组成,
属性 就是一个个具体的 变量,方法 就是可以重复执行的 代码。
类的语法格式:
修饰符 class 类名{ 属性声明; 方法声明; }
示例:
class Person { //属性(或成员变量) String name; int age; boolean ismarry; //方法 public void walk() { System.out.print("walk…"); } }
当你不对属性值进行设置的时候,则该属性值为对应数据类型的默认值;
String 默认值为:null
int 默认值为:0
如果想使用类,需要通过 对象 来完成,
创建对象格式:
类名 对象名 = new 类名();
当获取了实例化对象后,就可以通过 对象 对类中的属性和方法进行调用。
调用类中的属性:实例化对象.成员属性;
调用类中的方法:实例化对象.方法名称();
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person per = new Person(); System.out.println(per.age); per.walk(); } }
- 内存解析:
堆:此内存区域的唯一目是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有对象实例以及数组都要在堆上分配 。
栈:虚拟机栈用于存储局部变量等。局部变量表存放着各种基本数据类型、对象引用。方法执行完自动释放。
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译出的代码。
- 对象的内存:
以下面的程序为主进行分析
public class JavaDemo{ public static void main(String args[]){ Person per = new Person(); //声明并实例化对象 per.name = "张三"; //设置属性姓名值 per.age = 18 ; //设置属性年龄值 per.tel(); //进行方法的调用 } }
进行内存分析,先给出两块最为常用的内存空间:
- 堆内存: 保存的是对象的具体信息。
- 栈内存: 保存的是一块堆内存的地址,即:通过地址找到堆内存,而后找到对象内容,
为了分析简化起见简单的理解为对象的名称保存在了栈内存之中
针对之前的程序进行分析
将属性的值设置后运行程序结果为:
姓名:张三、年龄:18
再对分步的内存操作进行分析:
public class JavaDemo{ public static void main(String args[]){ Person per = null; //声明对象 per = new Person(); //实例化对象 per.name = "张三"; //设置属性姓名值 per.age = 18 ; //设置属性年龄值 per.tel(); //进行方法的调用 } }
结果还是一样不变的。
- 内存的引用传递
本质:同一块堆内存空间可以被不同的栈内存指向,也可以更换指向。
范例:定义一个引用传递的分析程序:
public class JavaDemo{ public static void main(String args[]){ Person per1 = new Person(); //声明并实例化对象 per.name = "张三"; per.age = 18 ; Person per2 = per1 ; //引用传递 Person.age = 80 ; per.tell() ; //进行方法的调用 } }
运行结果:
姓名:张三、年龄:80