不积跬步,无以至千里;不积小流,无以成江海。
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
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号