JavaSE基础知识(5)—面向对象(5.2类的成员)
一、属性
1、语法
数据类型 属性名 【= 属性值】;
2、特点
①属性的数据类型可以为任意类型,包含基本类型或引用类型
②属性可以不用手动赋值,有默认值
int——0
double——0.0
char——\u0000
boolean——false
引用类型——null
③属性伴随着对象存放在堆中,不同对象的属性相互独立,互不影响
④变量根据作用域不同,分为以下两类
全局变量:又称为属性,定义在类体中,作用域为整个类体以及其他类
局部变量:定义在方法或某个代码块内,作用域为所在的方法或代码块
3、局部变量和全局变量的区别:★
作用域 | 生命周期 | 存储位置 | 访问修饰符 | 默认值 | 重命名 | |
局部变量 | 定义变量的方法或某个代码块中 |
随着方法或代码块的执行而创建 随着执行的结束而消亡 |
基本类型:栈 引用类型:对象名存在栈,对象存在堆 |
× | × | 两个局部作用域有交集时,不可以重名 |
全局变量 | 整个类体及其他类 |
随着对象的创建而创建 随着对象的消亡而消亡 |
堆 | √ | √ | 一个全局和一个局部,可以重名,默认遵循就近原则 |
二、方法
1、概念
理解:用于描述类或对象的行为或功能,定义在类体中,属于类的成员
2、好处
1、提高代码的重用性和维护性
2、从调用层面上,调用者不用关心方法的内部实现细节,调用比较简单。只需要知道:
叫什么(方法名)
干什么(方法功能)
3、定义语法 ★
[修饰符] 返回类型 方法名(参数列表){
方法体
}
4、方法五要素
(1)修饰符
特点:可选
public 公共的,任意类都可以调用该方法
(2)返回类型
说明:某些行为或功能执行结束后需要返回给调用方一个具体的值,则将值的类型标注成返回类型,如果行为或功能执行结束后没有返回值,则返回类型写成void即可
特点:
①一个方法至多有一个返回值,要求返回值的类型和返回类型一致或兼容
②返回类型可以为任意类型,包含基本或引用
③如果方法有返回值,则方法体中要求必须有return语句,而且return的值的类型必须和返回类型一致或兼容
如果方法没有返回值,则方法体不用加return语句,如果非加,则写成 return;
④如果方法有返回值,则必须保证所有路径下都可以return值;
public int m(int i){
if(i>5)
return 10;
return 99;
}
(3)方法名
遵循标识符的命名规则和规范(同变量的规范):见名知义,且遵循驼峰命名法
(4)参数列表
说明:某些方法的执行需要调用方传递源数据,否则无法执行。我们把这些源数据称为参数
特点:
①参数可以为多个,语法如下:
(类型 参数名1,类型 参数名1,...,类型 参数名n)
②参数类型可以为任意类型,包含基本类型或引用类型
③参数的本质就是一个局部变量,也必须赋值后才能使用,但这个赋值一般是隐式赋值的(传参时)
④方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参
形参和实参的类型、个数必须一致,参数名无要求
(5)方法体
可以包含0条或任意多条逻辑语句。
形式:输入、输出、变量、运算、分支、循环、方法调用
5、调用语法 ★
1、本类内方法调用:方法名(实参列表);
2、跨类中方法调用:对象或类名.方法名(实参列表);
注意:
如果待调用的方法有返回值,则最好用变量接受或做其他处理
如果待调用的方法没有返回值,则不能当成表达式做任何处理
6、调用机制 √
每次方法调用,都伴随“入栈”的操作
每次调用结束,都伴随“出栈”的操作
7、方法的传参 ★
特点:
java中方法按“值”传递。
参数类型为基本类型,则值代表元素内容,传递是一个拷贝,形参的改变不影响实参
参数类型为引用类型,则值代表地址,传递是一个地址(引用),形参的改变影响实参
示例:
public static void main(String[] args){
int[] arr = {1,2,3};
update(arr);
print(arr);//1 2 3
}
public static void update(int[] arr){
arr = new int[3];
arr[0]=100;
print(arr);//100 0 0
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
8、方法的重载
1、定义:java中提供了一种机制,允许同一个类中多个同名但参数列表不同的方法存在
2、好处:
①解决了起名问题
②解决了记名麻烦问题
3、要求:
①同一个类中
②方法名必须相同
③参数列表必须不同(参数类型、个数或顺序至少有一样不同)
④返回类型无要求
⑤修饰符无要求
9、可变参数的方法
1、理解:jdk5.0出现的新特性。java中允许将一个类中同名,同参数类型、同返回的多个方法抽取成一个可变参数的方法
2、语法:
修饰符 返回类型 方法名(参数类型...参数名){
//参数当做数组类型去使用
}
3、好处:
①提高重用性
②提高维护性和扩展性
4、特点:
①可变参数的实参允许0个或多个参数
②可变参数的实参允许数组类型
③可变参数可以和普通类型的参数同时出现在一个形参列表,但要求可变参数必须放在最后
④一个形参列表中最多有一个可变参数
⑤可变参数的方法、普通类型参数的方法实现了重载(注:不可以和同一类型的数组参数方法构成重载),传参时:
遵循:先找一致类型——>兼容类型——>可变参数
A a = new A();
a.m(10);//执行方法1
pubic class A{
public void m(int a){ } //方法1
public void m(double a){ } //方法2
public void m(int... a){}//方法3
}
三、构造器
1、理解
构造器又称为构造方法,属于类中的第三大成员。
本质上同"方法",只是没有返回类型,且对于一个对象来讲,只调用一次,并且不是通过对象或类显示调用
2、语法
[修饰符] 构造器名 (参数列表){
//构造器体
}
注意:
①构造器名与类名一致!
②没有返回类型
3、好处
①用于创建对象
②可以进行初始化的操作,从一定程度上提高代码的重用性!
4、特点
①每一个类都有构造器,如果没有显式声明,系统将默认提供一个无参构造器
②如果显式声明了构造器,则系统将不再提供构造器
③构造器可以重载
④对于一个对象来讲,构造器只调用一次
注意:构造器的调用语法
方式一: 创建一个新对象
new 构造器名(参数列表);
方式二:为了进行初始化(注:this或super调用构造器,只能放在构造器的而第一句,而且只能有一个)
this(参数列表);
super(参数列表)
四、初始化块
1、理解
初始化块又称为代码块,属于类中的成员,本质上同方法。但没有方法名、没有参数和返回类型,只有方法体,而且不是显式调用的,是创建对象或加载类时隐式调用
2、语法
[static]{
方法体
}
使用static修饰的,称为静态代码块
没有用static修饰的,称为普通代码块
3、好处
①用于初始化信息,相当于构造器的补充
②当构造器重载时,如果里面有重复的语句,为了提高代码的重用性,往往将重复的语句提到初始化块中
4、特点 ★
(1)调用时机
静态代码块 是当加载类时,被隐式调用,而且只调用一次
普通代码块 是当对象创建时,被隐式调用,而且可以加载多次
【补充】类的加载时机
①创建对象
②调用静态成员
③加载子类
④反射
(2)顺序(静态代码块和普通代码块)
如果:一个类中可以有多个静态代码块和多个普通代码块
静态代码块的 执行 优先于 普通代码块
注意:同一个类别的代码块的执行顺序取决于定义的先后顺序
(3)顺序(静态代码块、普通代码块、属性初始化、构造器)
如果:一个类中有多个静态代码块和多个普通代码块、属性初始化、构造器
静态代码块|静态属性——>普通代码块|普通属性——>构造器
注意:同一个类别的代码块的执行顺序取决于定义的先后顺序
(4)顺序(父子类中静态代码块、普通代码块、属性初始化、构造器)
如果:父子类中都有多个静态代码块和多个普通代码块、属性初始化、构造器
父类静态代码块|静态属性——>子类静态代码块|子类静态属性
——>父类普通代码块|普通属性——>父类构造器
——>子类普通代码块|普通属性——>子类构造器
注意:同一个类别的代码块的执行顺序取决于定义的先后顺序
(5)静态成员的特点
静态代码块中只能直接访问静态成员,不能直接访问普通成员
五、内部类
1、理解
一个类体中又完整的嵌套了另一个完整的类结构,被嵌套在里面的类,称为内部类。
嵌套其他类的类,称为外部类。
其他类,称为外部其他类。
2、好处
可以直接访问外部类的私有成员
3、分类
按定义位置不同:
定义在成员位置上
成员内部类(无static修饰)
静态内部类(有static修饰)
定义在局部位置上
局部内部类
匿名内部类
4、内部类之成员内部类
(1)语法
class Outer{
class Inner{
}
}
(2)特点
①成员内部类中可以有五大成员,但不能有静态成员。原因:静态成员的加载时机早于成员内部类!
②成员内部类可以添加访问修饰符,访问权限遵循修饰符的限定
③互访原则:
成员内部类——>外部类 ★
直接访问,因为里面隐含着一个Outer.this的引用。
注意:当成员内部类和外部类的成员重名时,默认访问的是内部类的成员,如果想访问外部类的成员,可以通过Outer.this.成员的方式访问
外部类——>成员内部类
通过创建对象,去访问
语法:new Inner().成员
外部其他类——>成员内部类
通过创建对象,去访问
语法:Outer.Inner member = new Outer().new Inner(); member.成员
成员内部类——>外部其他类
通过创建对象,去访问
语法:new Other().成员
5、内部类之静态内部类
(1)语法
class Outer{
static class Inner{
}
}
(2)特点
1、静态内部类中可以有所有五大成员,包含普通的和静态的
2、静态内部类可以添加访问修饰符,当然也要遵循访问修饰符的权限限定
3、互访原则
静态内部类——>外部类 ★
直接访问外部类中的静态成员,包含私有的。但不能直接访问外部类的普通成员(遵循静态成员的特点)
注意:如果外部类和静态内部类中有同名成员,访问时遵循就近原则,如果非要访问外部类的成员,则通过 (外部类名.成员 )方式访问
外部类——>静态内部类
情况1:如果访问里面的静态成员,则直接通过静态内部类名去访问
情况2:如果访问里面的普通成员,则通过创建静态内部类对象去访问。
语法:new Inner().成员
外部其他类——>静态内部类
通过创建对象去访问
语法:Outer.Inner member = new Outer.Inner();
静态内部类——>外部其他类
注意:和普通两个类之间的互访一样
通过创建对象或类名的方式去访问
6、内部类之局部内部类
(1)语法
public void method(){
for(int i=1;i<10;i++){
class Inner3{
}
}
}
(2)特点
①里面可以有五大普通成员,但不能有静态成员。原因:静态成员的加载时机早于局部内部类!
②不能添加访问修饰符
③作用域:比较小,仅仅在定义它的方法或代码块中有效,而且遵循前向引用
④互访原则
局部内部类——>外部类 ★
情况1:可以访问同一个作用域的局部变量,但不能更新。因为默认是final修饰(jdk8,final是系统自动提供的;jdk8之前,final是手动加入)
为什么里面只能访问局部常量?
局部变量的消亡时机早于局部内部类,所以局部内部类中使用的仅仅是局部变量的拷贝。如果备份可以更新,则会导致数据不一致。
为了避免这种现象,只能读取,不能更新!
情况2:直接访问外部类的所有成员,包含私有的
注意:如果外部类和内部类的成员同名,则默认遵循就近原则,如果非要访问外部类的成员,则通过(外部类.this.成员 )方式访问
外部类——>局部内部类
创建对象并访问
7、内部类之匿名内部类
(1)语法
new 父类或接口名(){
//类体
};
(2)特点
①匿名内部类中可以有属性、方法、内部类、初始化块,但不能有构造器和静态成员
②不能添加修饰符
③作用域比较小,仅仅在定义它的方法或代码块中。
注意:匿名内部类的对象只有一个,可以直接拿着对象调用里面的成员或为对象起一个引用名,使用引用名调用通用的成员!
④互访原则
匿名内部类——>外部类
情况1:访问外部类中同一个作用域的局部变量,但要求局部变量使用final修饰(jdk8之前,final是需要手动添加;jdk8时,final是系统自动添加,不用手动添加)
原因:匿名内部类的消亡时机晚于局部变量的消亡时机,所以匿名内部类中使用的是局部变量的备份!为了避免数据不一致,所以只能读取不能更新
情况2:可以直接访问外部类中的成员
如果出现重名问题,则默认访问内部类的成员,如果非要访问外部类的成员,需要通过(外部类名.this.成员) 方式访问
外部类——>匿名内部类
new 类名(){}.成员
(3)应用场景 ★
当做实参传递给形参类型为接口的方法!
JavaSE基础知识(5)—面向对象(5.2类的成员)的更多相关文章
- python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- JavaSE基础知识(7)—常用类
一.包装类 1.理解 java为八大基本数据类型一一对应提供了引用类型,方便使用里面的属性和方法 2.包装类型 byte——>Byteshort——>Shortint——>Integ ...
- 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类
078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...
- JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)
面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...
- JavaSE基础知识(5)—面向对象(5.5 this和super关键字)
一.this关键字 1.说明 this关键字代表当前类的对象,可以访问本类的属性.方法.构造器注意:谁调用该方法,则this就指谁 2.语法 访问属性: this.属性名 = 值; System.ou ...
- JavaSE基础知识(5)—面向对象(5.3访问修饰符)
一.说明 访问修饰符可以用于修饰类或类的成员(属性.方法.构造器.内部类) 二.特点 名称 本类 本包 其他包的子类 其他包的非子类 private 私有的 √ × × × 缺省 默认 √ √ × ...
- JavaSE基础知识总结
最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...
- C#基础知识之面向对象以及面向对象的三大特性
在C#基础知识之类和结构体中我详细记录了类.类成员.重载.重写.继承等知识总结.这里就记录一下对面向对象和面向对象三大特性的广义理解. 一.理解面向对象 类是面向对象编程的基本单元,面向对象思想其实就 ...
- JAVA基础知识之面向对象编程知识汇总
JAVA基础课程部分面向对象已经学习完成,知识结构如下: 总体知识框架: 类的结构: 面向对象编程三大特征: 关键字和抽象类接口等: 常见知识汇总: 成员变量和局部变量比较 有无返回值方法比较: 权限 ...
随机推荐
- 算法笔记 3.2 codeup1935 查找学生信息
#include <stdio.h> #include <string.h> const int maxn = 1e3; struct student{ ]; ]; //!!! ...
- liunx top命令详解
1,当前服务器时间,up,服务器离上一次重启过了多久,多少个用户在使用,cpu平均负载,grep 'core id' /proc/cpuinfo | sort -u | wc -l ,一般来说4个, ...
- docker4种网络最佳实战 --摘自https://www.cnblogs.com/iiiiher/p/8047114.html
考: http://hicu.be/docker-container-network-types docker默认3中网络类型 参考: https://docs.docker.com/engine/u ...
- Java继承(下)
Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...
- Delphi调用大漠插件示例
Delphi XE2 版本调用大漠插件方法:打开Component->Import Component->默认Import a Type Library,点击Next->找到Dm.d ...
- Cglib源码分析 invoke和invokeSuper的差别(转)
原文 https://blog.csdn.net/makecontral/article/details/79593732 Cglib的实例 本文重在源码的分析,Cglib的使用不再复述. //被代理 ...
- c#继承 里氏转化原则
继承: 是c#中面向对象一个重要概念: 用一个已经存在的类去定义一个新的类 新的类叫做 子类/派生类 已经存在的类叫做 父类/基类 c#中所以类的最终基类都是Object类 声明 访问修饰符 ...
- minicom 抓取log
使用minicom也有很长时间了,只用minicom抓过uart log,但是从来没有去保存过这个log,也不知道有这个功能.后来在超级终端中发现有这个功能(传送->捕获文字),想想minico ...
- [转]IIS 日志记录时间和实际时间 不一样
今天偶然发现 2003 系统IIS 日志记录时间和实际时间总是差了8个小时,也就是慢了8个小时.苦苦找了半天才发现如下办法能解决 ,特发来分享下 解决1:如果 IIS日志记录默认使用的是W3C扩展日志 ...
- mysql六种日志
错误日志 MySQL服务启动和关闭过程中的信息以及其它错误和警告信息.默认在数据目录下 普通查询日志 用于记录select查询语句的日志.general_log.general_log_file 默认 ...