Java核心基础(七)


本篇文章内容来自尚硅谷java核心基础免费课程的笔记整理(去掉了一些繁杂多余的内容)。
有零基础或者想看视频学习的可以去官网。
http://www.atguigu.com/
因为在深入学习公开的已知漏洞时发现自己的java功底不够。
于是又开了个新坑。


Java类和对象

面向对象的思想概述

 类(Class)和对象(Object)是面向对象的核心概念。
  类是对一类事物的描述,是抽象的、概念上的定义
  对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。

      “万事万物皆对象”

 常见的java类的成员有:
  属 性(field):对应类中的成员变量
  行 为(method):对应类中的成员方法(函数)

Java类及类的成员

类的语法格式:

类的语法格式

创建自定义类:

  步骤:
    1. 定义类(考虑修饰符、类名)
    2. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
    3. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

  对象(实例)的创建和使用:

    创建对象语法: 类名 对象名 = new 类名();
    使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

    说明:如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。

  类的访问机制:
    在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
    在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。

对象的产生:

  Person p1 = new Person();执行完后的内存状态。其中类定义如下:

class Person{
	int age;
	void shout(){
		System.out.println(“oh,my god! I am ” + age);
	}
}

内存状态

对象的使用:

class PersonTest{
	public static void main(String[] args) { //程序运行的内存布局如下图
		Person p1 = new Person();
		Person p2 =new Person();
		p1.age = -30;
		p1.shout();
		p2.shout();
	}
}

内存状态

对象的生命周期:

  JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。

内存解析:

  堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。

  通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。

  方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

内存解析

匿名对象:

  我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
    如:new Person().shout();
  使用情况
    如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
    我们经常将匿名对象作为实参传递给一个方法调用。


Java类的成员

属性(field):

  语法格式:
   修饰符 数据类型 属性名 = 初始化值 ;

  说明1: 修饰符
   常用的权限修饰符有:private、缺省、protected、public
   其他修饰符:static、final (暂不考虑)

  说明2:数据类型
   任何基本数据类型(如int、Boolean) 或 任何引用数据类型。

  说明3:属性名
属于标识符,符合命名规则和规范即可。

  成员变量(属性)以及局部变量:

成员变量(属性)以及局部变量

  成员变量(属性)以及局部变量的区别:

成员变量(属性)以及局部变量的区别

   当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型。

方法(method):

  什么是方法(method、函数):
   方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
   将功能封装为方法的目的是,可以实现代码重用,简化代码
   Java里的方法不能独立存在,所有的方法必须定义在类里。

  方法的声明格式:

   修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
     方法体程序代码
     return 返回值;
   }

   其中:

    修饰符:public,缺省,private, protected等

    返回值类型:

     没有返回值:void。

     有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用

    方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”

    形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开

    返回值:方法在执行完毕后返还给调用它的程序的数据。

方法的分类:按照是否有形参及返回值

  方法的调用:

   方法通过方法名被调用,且只有被调用才会执行。

   方法被调用一次,就会执行一次

   没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。

   定义方法时,方法的结果应该返回给调用者,交由调用者处理。

   方法中只能调用方法或属性,不可以在方法内部定义方法。


文章作者: meta-taamr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 meta-taamr !