Java类和对象

一、面对对象编程

面向对象指以属性和行为的观点去分析现实生活中的事物
面向对象编程指以面向对象的思想进行分析,然后使用面向对象的编程语言进行表达

二、类

类即“分类”,是对具有相同特征的行为的多个对象共性的抽象描述。
java中体现为一种引用数据类型,包含成员变量(特征/属性)以及成员方法(行为)

三、对象

对象是指现实生活中客观存在的实体,Java中体现为内存空间中的一块存储区域

四、类和对象

类用于构建对象,对象的数据结构由定义它的类决定;两者关系如 汽车(类) - 奔驰(对象)

1.格式

class 类名 {  类体; }

注意:约定单类名由多个单词组成时,要求每个单词首字母都要大写

2.类的实例化(又叫对象的创建)

格式:new 类名();
本质是在内存空间的堆区中申请一块存储区域,存放该对象独有特征信息

3.引用

概念
类实例化后,在内存中申请了一块内存空间,需要一个变量来保存内存空间的地址,方便进行访问,故引出引用数据类型的概念。使用引用数据类型定义的变量叫引用型变量,简称引用,用于记录对象在堆区中的内存地址信息,便于下次访问。
格式
类名 引用变量名; (类名 引用变量名 = new 类名();)
引用变量名.成员变量名
注意
引用类型变量存放对象的地址,可以给引用类型赋值为null,表示不指向任何对象

4.类的组成

A.构造方法

1.格式

类名(形参列表){
	构造方法体;
}

构造方法名与类名完全相同并且没有返回值类型,连void都不许有

2.默认/缺省构造方法
当一个类中没有定义构造方法是,编译器会自动添加一个无参空构造方法,称为默认/缺省构造方法,若出现了构造方法,则编译器不再提供任何形式的构造方法。
3.作用
使用new关键字创建对象时,会自动调用构造方法实现成员变量的初始化工作
4.注意
构造方法不能通过引用.的方式进行调用

B.成员变量

1.格式

calss 类名 { 
	数据类型 成员变量名 = 初始值;
}

当成员变量名由多个单词组成时,通常要求从第二个单词起每个单词的首字母大写

2.初始值
对象创建后,成员变量未声明初始值的话,java会按默认值对其初始化

  • 数值类型byte、short、int、long、float、double、char 默认初始值为0,char默认值是指ASCII码为0,打印出来是空字符
  • boolean型 默认初始值为false
  • 引用类型 null
C.成员方法

1.格式

class 类名 {  
	返回值类型 成员方法名(形参列表) {
		成员方法体;
	} 
}

注意:当成员方法名由多个单词组成时,通常要求从第二个单词起每个单词的首字母大写

2.组成

返回值

作用:返回值指从方法体内返回到方法体外的数据内容

返回值具有类型

  • 有返回值:通过return关键字返回数据并结束方法体,可以是基本数据类型,也可以是引用数据类型
  • 无返回值:方法不需要返回任何数据内容时,返回值类型为 void

形式参数

作用:形式参数用于将方法体外的数据内容带入方法体内
格式:数据类型 形参变量名1, 数据类型 形参变量名2, …

可变长参数

格式:返回值类型 方法名 (参数的类型… 参数名)

注意:
1.方法参数部分指定类型的参数个数是可以改变的,也就是0~n个
2.一个方法的形参列表中最多只能声明一个可变长形参,并且需要放到参数列表的末尾

方法体

用于编写描述该方法功能的语句块,可以实现代码的重用,简化代码

3.调用

格式: 引用变量名. 成员方法名(实参列表);

实际参数列表主要用与对形式参数进行初始化操作,所以实参的个数、类型和顺序要和形参的完全一致
实际参数可以传递直接量、变量、表达式、方法的调用等

4.参数传递

相关概念

  • 参数分为形参和实参,定义方法时的参数叫形参,调用方法时传递的参数叫实参
  • 值传递:当参数为基本类型时,此时是值传递,直接把数值赋值给了形参
  • 引用传递:当参数为引用类型时,此时是引用传递,把对象的地址赋值给形参

方法的传参过程

在这里插入图片描述

基本数据类型传参

形参变量数值的改变通常不会影响到实参变量的数值,因为两个变量有各自独立的内存空间

引用数据类型传参

形参变量指向内容的改变会影响到实参变量指向内容的数值,因为两个变量指向同一块内存空间

D.构造块

1.概念
在类体中直接使用 {} 括起来的代码块
2. 执行
每创建一个对象都会执行一次构造块,且会在构造方法之前执行
3.作用
当需要在执行构造方法体之前做一些准备工作时,则将准备工作的相关代码写在构造体中即可,比如:对成员变量进行统一的初始化操作

E.静态代码块

1.概念
使用static关键字修饰的构造块
2. 执行
静态代码块随着类的加载是执行一次
3.作用
当需要在执行代码块之前随着类的加载做一些准备工作时,则编写代码到静态代码块中,比如:加载数据库的驱动包等

F.内部类

见后面特殊类

5.this关键字

区别
构造方法中的this关键字代表当前正在构造的对象
成员 方法中的this关键字代表正在调用此方法的对象
本质
this关键字的本质就是当前类类型的引用变量
原理
在构造方法和成员方法中访问成员变量时,编译器会默认加上this.的前缀
使用方式

  • 当局部变量名和成员变量名相同时,在方法中需对成员变量名的前面加上this.的前缀,明确要求该变量是成员变量
  • 通过this.的方式调用成员变量和成员方法
  • this可以作为方法的返回值
  • 在构造方法的第一行可以使用this()的方式调用本类中的其他构造方法

6.static关键字

基本概念

  1. static表示静态的含义,可以修饰成员变量和成员方法,此时可以使用引用.的方式访问,但推荐用类名.的方式
  2. static修饰成员变量时,此时成员变量由对象层级提升为类层级,该成员变量随着类的加载准备就绪,整个类只有一份并被所有对象共享,与是否创建对象无关
  3. 被static修饰的成员变量叫静态成员变量,被修饰的方法叫静态成员方法

使用方式

  • 在非静态方法中既能访问非静态的成员又能访问静态的成员 (静态成员被所有对象共享)
  • 在静态方法中只能访问静态成员不能访问非静态成员( 因为此时可能还没有创建对象)
  • 严格遵循只有隶属类层级并被所有对象共享的内容才可以使用static关键字修饰(不能滥用static关键字)

7.代码块和静态代码块的执行等级

  • 同一个类中

    先执行静态代码块,再执行构造块,最后执行构造方法体

  • 继承关系的类中

    1.先执行父类的静态代码块,再执行子类的静态代码块
    2.执行父类的构造块,再执行父类的构造方法体
    3.执行子类的构造块,再执行父类的构造方法体
    大致理解
    1.父类.class先于子类.class文件读入内存,故父类的静态代码块先于子类的静态代码块执行
    2.创建子类对象时,会先构造父类,用来初始化继承下来的父类成员变量
    3.又创建对象时会执行构造块和构造方法,故先执行父类的构造块和构造方法体,再执行子类

8.程序的执行流程和内存分析

栈区

  • 栈用于存放程序运行过程当中所有的局部变量。一个运行的Java程序从开始到结束会有多次方法的调用
  • JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据
  • 当某一个方法调用完成后,其对应的栈帧将被清除

程序分析
在这里插入图片描述
1.执行程序时,先将代码从硬盘加载到内存中的方法区中
2.执行main方法,此时在栈区为main方法申请一段内存,保存方法中的局部变量等
3.执行new Person()时,在堆区申请空间,保存Person的成员变量等,将内存地址赋值给引用变量p

五、其他相关

1. main方法参数

main方法传参时,通过在dos命令窗口使用 java xxxx 调用时通过空格隔开各参数值 例如 java Test 张三 李四 王五 其中传入3个参数,第一个参数为张三 第二个参数为李四 第三个参数为王五

2. 访问控制

常用的访问控制符
在这里插入图片描述
注意

  • public修饰的成员可以在任意位置使用
  • private修饰的成员只能在本类内部使用
  • 通常,成员方法都用public修饰,成员变量都用private修饰

3.package关键字

出现原因
定义类时需要指定类的名称,但如果仅仅将类名作为类的唯一标识,则不可避免的出现命名冲突的问题。这会给组件复用以及团队间的合作造成很大的麻烦
作用
为了实现项目管理、解决命名冲突以及权限控制的效果
包的定义
在定义一个类时,除了定义类的名称一般还要指定一个包名,格式如下:
package 包名;
包的规范
org.apache.commons.lang.StringUtil
其中StringUtils是类名而org.apache.commons.lang是多层包名,其含义如下:
org.apache表示公司或组织的信息(是这个公司(或组织)域名的反写);
common 表示项目的名称信息;
lang 表示模块的名称信息。

4.import关键字

使用import关键字导入包
使用import关键子导入静态成员,从java5开始支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值