JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
1.概述
上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例
就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对象的思想
2.成员变量
面向对象有三大特征
- 封装
- 继承
那具体是什么意思呢?
我们开发的话,就是就是在找对象,没有对象的话,就new 一个对象,对象和类,对象和对象都是有关系的,我们需要去维护类就是生活中对事物的描述
对象就是这类事物实实在在存在的个体需求:描述汽车(颜色,轮胎个数),描述事物就是在描述事物的属性和行为
我们可以直接定义一个class
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Car car = new Car(); // 输出颜色 System.out.println(car.color + "的小汽车"); // 输出轮胎个数 System.out.println(car.num + "个轮子"); // 输出行为 car.run(); } } /** * 汽车类 * * @author LGL * */ class Car { // 颜色 String color = "红色"; // 轮胎个数 int num = 4; // 行为 void run() { System.out.println("我是" + color + "的小汽车,我有" + num + "个轮子"); } }
这样大家看的懂吗,我们猴子姐new一个Car就可以
其实定义类,就是描述事物。就是在定义属性和行为,属性和行为共同成为类中的成员(成员变量)
3.局部变量
其实局部变量我们一直在写,他和成员变量的区别在于作用的范围不一样
我们以上述的例子
- 成员变量:作用在全局中
- 局部变量:作用在Car类里
在内存中的存储和位置
- 成员变量在堆内存中,因为对象的存在才在内存中存在
- 局部变量在栈内存中
4.匿名对象
这是一个小知识点,匿名换句话其实就是没有名字的意思
- 匿名对象是对象的简化版
- 匿名对象两种使用情况
- 当对对象方法仅进行一次调用的时候
- 匿名对象可以作为实际参数进行传递
我们用简单的例子
//正常的写法 Car c = new Car(); c.num = 5; //匿名对象 new Car().num = 5;
可以看到我不起名字直接去更改num的值了,这就是匿名对象
第二种使用方式实际参数去传递,其实在上面我用到了
// 输出颜色 System.out.println(new Car().color + "的小汽车");
这样就OK了
5.封装
OK,终于说道我们的核心思想了Encapsulation
封装的含义:是指隐藏的对象的属性和实现细节,仅对外提供访问方式
好处
- 将变化隔开
- 便于使用
- 提高复用性
- 提高安全性
封装原则
将不需要对外提供的内容都隐藏起来;
把属性都隐藏,提供对外访问方式我们写例子
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { showString("我是封装"); } /** * 封装 * * @param str */ public static void showString(String str) { System.out.println(str); } }
这个就是最简单的封装了,你给我个字符串我就打印,过程你不必知道,函数本身就是一个最小的封装体
6.private
私有的,怎么使用?
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); p.age = 20; p.speak(); } } class Person { int age; // 说话方法 void speak() { System.out.println("我今年" + age + "岁"); } }
我们现在的代码是这样写的,输出的结果
这里我们直接访问了arg,这里就存在了一个安全隐患,这里也就是用到private修饰符去修饰arg了
在这里,就看到一个错误提示了,因为我们用private修饰了之后,你就不能拿到了
private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)
注意的是,私有只在本类中有效那我们怎么去访问呢?你既然私有了,就需要对外提供一个方法
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); // p.age = 20; p.setAges(20); p.speak(); } } class Person { // 私有 private int age; /** * 对外提供方法 * * @param a */ public void setAges(int a) { age = a; } // 说话方法 void speak() { System.out.println("我今年" + age + "岁"); } }
我们这样做,也是可以的
但是我们一般也不会这样做,我们有规范
public int getAge() { return age; } public void setAge(int age) { this.age = age; }
所以我们的完整代码应该是这样写
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); // p.age = 20; // p.setAges(20); p.setAge(20); p.speak(); } } class Person { // 私有 private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 说话方法 void speak() { System.out.println("我今年" + age + "岁"); } }
输出的结果
但是你要切记,注意,私有仅仅是封装的一种表现形式;
我们之所以对外提供访问方式就是为了方便我们加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性
7.构造方法
特点
- 函数名和类名相同
- 不用定义返回值类型
- 不可以写return语句
作用
- 给对象进行初始化
注意
- 默认构造函数的特点
- 多个构造函数是以重载的形式存在的
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); } } class Person { //构造方法 public Person() { System.out.println("我是构造方法"); } }
我们只要new了,就执行了构造方法
对象一建立就会调用与之对应的构造函数
构造函数的作用:可以用于对对象的初始化
构造函数的小细节,当一个类中没有定义构造函数时,系统默认给该类加入一个空参数构造方法
当该类定义了构造方法,那就默认的没有了,构造方法用了重载
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); Person p1 = new Person("我是小米"); Person p2 = new Person("我是小王", 20); } } class Person { // 构造方法 public Person() { System.out.println("我是构造方法"); } // 构造方法 public Person(String str) { System.out.println(str); } // 构造方法 public Person(String str, int age) { System.out.println("我是构造方法" + age); } }
就是这样,我们输出
8.构造代码块
这里提个小知识点来完结本篇幅
我们看一段代码
//公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Person p = new Person(); } } class Person { { System.out.println("我是构造方法"); } }
想知道他的运行结果是什么吗
咦,为什么方法都没有名字,就运行了,这个{}就是构造方法吗?
如果你代用多个构造方法的话你会发现他掉欧勇多次,这个现象,我们可以这样解释构造代码块:
- 作用就是给对象初始化
- 而且优先于构造方法
和构造方法的区别:
- 构造代码块是给所有对象进行统一初始化
- 而构造函数是给对应的对象初始化
构造方法中定义的是不同对象共性的初始化内容(抽取)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素 数组的格式 //公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { /** * 格式:元素类型 [] 数组名 = new 元素类型[元素个数] * 定义一个可以存储3个整数的容器 */ int[] x = new int[3]; } } 2.内存结构 JAVA程序在运行时,需要在内存中分配空间,为了提高效率,有对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存内存管理方式 堆内存:用于存储局部变量,当数据使用完,所占空间会自动释放 栈内存 数组和对象,通过new建立的实例都放在堆内存中 每一个实体都有内存地址值 实体中的变量都有默认的初始值 实体不再被使用,会在不确定的...
- 下一篇
JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 一.this关键字 用于区分局部变量和成员变量同名的情况 this的特点 this就代表本类对象 这在我们的set方法里面是有的 public void setName(String name) { this.name = name; } this代表他所在的函数对属对象的引用 现在我们这里有这么一个需求 //公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { /** * 需求:给人定义一个用于比较年龄相同的功能,也就是是否是同龄人 */ Person p1 = new Person(20); Person p2 = new Person(25); boolean b = p1.compare(p2); System.out.println(b); } } class Person { private int age; //...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境