2021-08-16面向对象进阶
第二章:面向对象进阶知识梳理
本章的内容概括:类的成员、THIS关键字、封装、静态成员。
内容一:类的成员变量和类变量区别
- 类的成员分为属性和方法,属性就是类的成员变量,也称为全局变量。类的方法里声明的变量称为局部变量。
2.成员变量分为:实例属性(无static修饰)、类属性(有static修饰)。
下面我们一起通过案例来看看类中的实例属性和类属性:
package com.test1;public class Hero {String name;//实例变量(每个对象都会拥有自己的name属性)
static String camp;//类变量}package com.test1;public class Mytest1 {public static void main(String[] args) {// TODO Auto-generated method stubHero h1=new Hero();h1.name="剑圣";Hero h2=new Hero();h2.name="剑魔";System.out.println(h1.name);System.out.println(h2.name); }
}
以上是实例属性的案例,总结:未使用static修饰的为实例属性,属于对象所有,每个对象都拥有自己的实例属性,互不影响。
```java
package com.test1;public class Hero {String name;//实例变量(每个对象都会拥有自己的name属性)
static String camp;//类变量}package com.test1;public class Mytest1 {public static void main(String[] args) {// TODO Auto-generated method stubHero h1=new Hero();Hero.camp="近卫方";Hero h2=new Hero();Hero.camp="天灾方";System.out.println(Hero.camp);}
}
以上是类属性的案例,总结:静态static的类属性,因不属于对象,所以使用时直接通过类名加点操作符进行访问和使用。类属性属于类所有,整个项目中仅此一份,属于共享使用。
内容二:this关键字和方法调用
问题:Java中当我们的成员变量和方法中的局部变量名字相同的时候,如何保证使用正确呢?
答案:在类定义的时候可以通过THIS 关键字访问到该类中的实例属性,THIS 其实就是指向当前类的对象的地址,THIS 关键字最大的作用就是:让类中的一个方法访问该类中的另一个方法或实例成员变量。
下面我们一起来看看THIS关键字的使用以及通过THIS 关键字来解决成员变量和局部变量同名的问题:
package com.test1;public class Hero {String name;
public void setName(String name) {this.name=name;
}
}package com.test1;public class Mytest1 {public static void main(String[] args) {// TODO Auto-generated method stubHero h=new Hero();h.setName("剑魔");System.out.println(h.name);}
}
总结:如果成员变量和局部变量同名时,可以使用this关键字来解决这个问题。
如果成员变量和局部变量同名时,你没有使用this关键字的话,那么将会出现下面这种情况:
package com.test1;public class Hero {String name;
public void setName(String name) {name=name;
}
}package com.test1;public class Mytest1 {public static void main(String[] args) {// TODO Auto-generated method stubHero h=new Hero();h.setName("剑魔");System.out.println(h.name);}
}
总节:如果不使用this关键字,电脑会处于蒙圈状态,不知道你的name到底具体指的是哪个,因而结果是null空的,只有加上this关键字才能解决这个问题。
package com.test1;public class Hero {String name;
public void setName(String name) {this.name=name;
}
//方法1
public void test1() {System.out.println("这是方法1执行的功能");
}
//方法2
public void test2() {this.test1();//这个this可以不写,他会默认调用当前类中的这个方法,但是为了可读性强就加上一个thisSystem.out.println("这是方法2执行的功能");
}
}
在这里大家需要注意:同一个类中的方法之间互相调用,可以直接去调用方法名,但是如果你在另一个类中想调用当前我们这个类中的方法就需要先创建对象然后再调用就可以了。所以THIS关键字这个作用就很明确了,就代表当前自己这个类中。
关于内容二this关键字的小节:THIS就相当于对类当前对象的一个引用,可以避免类中成员变量和局部变量重名时的冲突问题,因为this指的是当前对象,所以大家注意(!!!),THIS不能和static静态关键字一起使用,因为static修饰的成员不属于任何对象所有而属于类所有。
内容三:类的成员封装
封装是面向对象三大特征之一,封装的主要意思:该隐藏的隐藏,该开放的开放。
下面我们就来看看在Java中为什么需要封装以及怎么实现封装:
package com.test1;
//英雄类
public class Hero {private String name;
private int age;
//设置年龄数据
public void setAge(int age) {if (age<18) {System.out.println("年龄赋予不合法,请重新操作");}else {this.age=age;}
}
//获取对象的年龄数据
public int getAge() {return this.age;
}
public String getName() {return name;
}
//该方法可以让外界访问
public void setName(String name) {if (name.length()<2||name.length()>6) {System.out.println("姓名赋予不合法");}else {this.name=name;}
}}package com.test1;public class Mytest1 {public static void main(String[] args) {// TODO Auto-generated method stubHero h1=new Hero();
// h1.age=18;//不能使用,因为age是private私有成员h1.setAge(18);h1.setName("张三");System.out.println("英雄的年龄是:"+h1.getAge());System.out.println("英雄的姓名是:"+h1.getName());}
}
总结:所以封装的概念其实很简单,就是把我们的一些需要隐藏的东西私有化,然后再提供一种公共的方法,让别人去访问他,就是这个目的。提高安全性,隐藏细节。
内容四:类中的静态方法和静态代码块
1.被static修饰的成员即为静态成员,静态成员包括:静态代码块,静态属性,静态方法。
2.静态成员不属于某个对象,仅属于静态成员所在的类。静态成员可以通过类名直接访问,也可以通过类的对象访问,一般推荐使用类名访问。
下面我们来看看静态成员的使用:
package com.test1;public class Mytest {//类所有
static int number;
}package com.test1;public class test {public static void main(String[] args) {// TODO Auto-generated method stubMytest t1=new Mytest();t1.number=100;Mytest t2=new Mytest();t2.number=10;System.out.println(t1.number);System.out.println(t2.number);}
}
静态代码块的使用:
package com.test1;public class Mytest {//静态代码块static {System.out.println("静态代码块1");}static {System.out.println("静态代码块2");}static {System.out.println("静态代码块3");}
}package com.test1;public class test {public static void main(String[] args) {// TODO Auto-generated method stubMytest t1=new Mytest();}
}
2021-08-16面向对象进阶相关推荐
- 2021年高级前端进阶之路
YYDS 2021年高级前端进阶之路1.两边固定,中间自适应布局(1.用flex;2.用display:left;3.用相对定位和绝对定位结合)2.js判断字符串中出现次数最多的字符(1.用for循环 ...
- Python之面向对象进阶
Python之面向对象进阶 进阶有:Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员 类的成员可以分为三大类:字段.方法和属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据 ...
- Python面向对象进阶和socket网络编程
写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...
- python进阶课程目标 学习内容_Python学习教程(Python学习路线):第九天-面向对象进阶...
面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...
- Day09.面向对象进阶
面向对象进阶 文章目录 面向对象进阶 前言 一. @property装饰器 二. \_\_slots\_\_魔法 三. 静态方法和类方法 四. 类之间的关系 五. 继承和多态 六. 综合案例 案例1: ...
- python进阶路线知乎_Python学习教程(Python学习路线):第九天-面向对象进阶
面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...
- 纯Go实现的Firebase的替代品 | Gopher Daily (2021.08.11) ʕ◔ϖ◔ʔ
每日一谚:Global variables should have longer names. Go技术生态 如何才能成功将Python切换到Go - https://itnext.io/opinio ...
- Day9 :面向对象进阶
文章目录 面向对象进阶 @property装饰器 __slots__魔法 静态方法和类方法 类之间的关系 继承和多态 综合案例 案例1:奥特曼打小怪兽. 案例2:扑克游戏. 案例3:工资结算系统. 面 ...
- Go 1.17 RC2发布 | Gopher Daily (2021.08.03) ʕ◔ϖ◔ʔ
每日一谚:Package name space is flat Go技术生态 Go 1.17 RC2发布 - https://groups.google.com/g/golang-announce/c ...
- 18. 面向对象进阶
18. 面向对象进阶 目标:掌握面向对象进阶相关知识点,能沟通更加自如的使用面向对象来进行编程. 概要: 成员 变量 实例变量 类变量 方法 绑定方法 类方法 静态方法 属性 成员修饰符(公有/私有) ...
最新文章
- 什么是集成测试?非渐增式和渐增式有什么区别
- OCP-Oracle 12c 数据库认证
- ubuntu 导入mysql_Ubuntu 下MySQL导入数据库.sql文件 命令
- vnc远程桌面复制文件Linux,vncviewer远程桌面linux
- SAP Spartacus Unit List Component的设计明细 - UnitListComponent
- SWT、JavaFx十种页面布局快速理解
- win7便签点击删除按钮的时候不弹出提示框
- copy和strong的区别
- FCM算法与K-means 算法
- vue 手写签名_真正的艺术签名!让你的名字充满明星范!
- Photoshop裁剪工具隐藏技巧
- php栏目一二级排序,灵动标签完美实现当前栏目高亮-支持二级栏目及内容页及栏目排序...
- iOS开发之主题皮肤
- 详解变频器、逆变器工作原理
- 罗技mx master无法优联连接的解决
- 血泪总结:如何从微信小程序的坑跳进支付宝小程序的大坑
- pymysql模块安装后,import pymysql找不到?
- 什么是物联网AIoT?
- enum java 赋值_java enum无法赋初始值
- 完美解决win10不认移动硬盘和U盘的问题