不积跬步,无以至千里;不积小流,无以成江海。

 

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

  

内容借鉴:https://www.cnblogs.com/wvae/articles/9682991.html

posted on 2019-11-13 15:32  smile学子  阅读(133)  评论(0编辑  收藏  举报