java-面向对象-封装-this-构造函数
概要图

一 构造函数
1.1 构造函数(Constructor)有什么用?
可以对对象创建进行初始化。
1.2 构造函数怎么在代码中体现呢?
class Person
{
//Person(){}//默认的空参数构造函数。
} main()
{
Person p = new Person();//这就已经调用了Person类中的空参数的构造函数。
//类中有定义该构造函数吗?有的。只要定义一个类,
//该类中默认就有一个空参数的构造函数,是编译器编译时添加到class文件中。
//注意:如果在类中自定义了构造函数,那么默认的空参数构造函数编译器就不添加了。
//原理:没有定义对象的初始化过程,编译器会添加一个默认的初始化过程。
// 如果定义了指定的对象初始化过程,默认的就不添加了。
}
1.3 构造函数的细节:
class Person
{
private Person(){}
} main()
{
Person p = new Person();//创建对象无法初始化。
}
1.4 构造函数和一般函数的区别?
class Person
{
//Person(){}
void Person(){}//这是一般函数。但不要这些书写,因为一般函数名称有规范。
} main()
{
Person p = new Person();
} */ class Person
{
//属性:姓名,年龄。
private String name;
private int age;
//一初始化,既没有姓名,又没有年龄。
Person()
{ }
// Person(int a)
// {
// if(a<0)
// return;
// age = a;
// } //定义构造函数,对象一创建就具备姓名。
Person(String n)
{
//将接收到的值赋值给对象的name
name = n;
} //一初始化既有姓名,又有年龄。
Person(String n,int a)
{
name = n;
age = a; } //行为。
public void speak()
{
System.out.println("name="+name+",age="+age);
}
} class PersonDemo2
{
public static void main(String[] args)
{ Person p1 = new Person(); // Person p = new Person("lisi");//对象创建时,必须会调用对应的构造函数,因为对象需要初始化。 // Person p2 = new Person("wangwu",23); }
}
二 构造函数调用图解

三 基本数据引用数据类型参数传递图解

四 封装
表现:
1,函数就是一个最基本封装体。
2,类其实也是一个封装体。
从以上两点得出结论:
好处:
1,提高了代码的复用性。
2,隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。
3,提高了安全性。
它也是面向对象思想的特征之一。
共有三个特征:封装,继承,多态。
举例:机箱。隐藏了办卡设备的细节,对外提供了插口以及开关等访问内部细节的方式。
*/
//描述人。Person
//属性:年龄。
//行为:说话:说出自己的年龄。
/*
总结:
类中不需要对外提供的内容都私有化,包括属性和行为。
selectSort(int[] arr)
{
swap(
} bubbleSort(int[] arr)
{
swap(
} private swap(int[] arr,int a,int b)
{ }
重点:以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。
*/ class Person
{
//属性:
private int age;//age就是被修饰为了private私有。也就是被隐藏了。这就是封装的一种体现。
//行为:
void speak()
{
System.out.println("age="+age);
} /*
年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了,不行。
咋办,按照之前所学习的封装的原理,隐藏后,还需要提供访问方式。
通过方法的方式,让其他程序访问到,就可以了。更重要的是可以在方法中加入逻辑判断。
记住:对变量的访问操作有两个动作:赋值(设置 set),取值(获取 get)
所以,对私有的变量访问的方式就是 set变量 get变量--> setAge getAge
*/
//定义对age赋值的方法。
void setAge(int a)
{
//加入逻辑判断。
if(a>0 && a<130)
age = a;
else
// System.out.println("对不起,您的年龄数值 "+a+" 是非法的。");
// throw new RuntimeException("对不起,您的年龄数值 "+a+" 是非法的。");//异常!一旦出现,程序结束。需要修正代码。
} //定义一个获取age值的方法。
int getAge()
{
return age;
} } class PersonDemo
{
public static void main(String[] args)
{
//测试Person.class。
//创建对象。
Person p = new Person(); /*
赋值-20是可以的,因为age属性是int类型,但是确不符合现实生活中的事物。
怎么解决这个问题呢?
不让它访问就哦了。怎么在代码上实现呢?需要使用一个Java中的关键字也是一个修饰符 private(私有,权限修饰符)
记住:私有仅仅是封装的体现形式而已。 */
// p.age = -20;//age不能在person类以外的程序中直接访问了。 //演示对age设置和获取方法的体现。
p.setAge(-20);
int a = p.getAge();
System.out.println("a="+a);
// p.speak();
}
}
五 this
5.1 当构造函数之间进行互相调用时,该如何解决呢?
构造函数是对象初始化时调用的。
给哪个对象初始化呢?通过this关键字来记录住对象的地址。并通过this来明确被初始化的对象。
在构造函数中调用其他构造函数的格式: this(实参列表);就会调用对应的构造函数。
小节:
this到底代表什么呢?★★★★★
this就代表对象,代表哪个对象呢?哪个对象调用了this所在函数,this就代表哪个对象。
*/
class Person
{
private String name;
private int age;
Person()
{ }
//初始化姓名。
private Person(String n)
{ name = n;
}
//初始化姓名和年龄。既然有初始化姓名的动作。直接调用就可以了。
Person(String n,int a)
{ this(n);//调用一个字符串参数的构造函数。注意:调用其他构造函数的语句,
//必须定义在构造函数的第一行。原因:初始化动作要先执行。
// name = n;
age = a;
} } class PersonDemo3
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
Person p1 = new Person("lisi1",21);
}
}
图解

/*
this关键字的另一个作用:
可以用this标识哪个变量是成员变量。这个标识可以省略不写。
但是,当局部变量和成员变量同名时,必须用this.来标识成员变量。
*/
class Person
{
private String name;
private int age; Person(String name,int age)
{
this.name = name;
this.age = age;
}
public void speak()
{
String name = "haha";
System.out.println("name="+this.name+",age="+this.age);
}
public void method()
{
this.speak();//this可以省略。
}
5.2 练习
定义功能,判断两个人是否是同龄人。
//1,明确结果,boolean 2,明确未知内容,1个,Person类型。
public boolean equalsAge(Person pp)
{
/*
if(pp.age == this.age)//当函数中使用到了调用该函数的对象时,用this表示这个对象。
return true;
return false;
*/
// return (pp.age == this.age)?true:false;
return pp.age == this.age;
}
}
注意下面代码的结果
class Person
{
void show()
{
System.out.println(this);
}
}
public class Test { public static void main(String[] args) {
Person p = new Person();
p.show();
System.out.println(p); } }
结果

java-面向对象-封装-this-构造函数的更多相关文章
- Java面向对象㈠ -- 封装
Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...
- Java面向对象封装和继承
面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...
- JAVA面向对象-----封装
我们日常使用的电脑主机,把cpu.内存.主板等等都封装到机箱里面去.假如没有机箱的话的出现什么问题,主机.主板全部都散落在一处,然后开机没有开机按钮,那么需要我们直接操作接跳线才能把电脑开启.这样子的 ...
- Java面向对象----封装概念
封装 信息隐藏,隐藏对象的细节 访问修饰符 public private protected 默认 属性封装的实现 方法封装的目的(隐藏方法实现细节) package com.tanlei.newer ...
- Java面向对象封装优化2_构造方法
1. 类 package cn.itcast.day06.demo05; /* 一个标准的类通常要拥有下面四个组成部分: 1. 所有的成员变量都要使用private关键字修饰 2. 为每一个成员变量编 ...
- 学习练习 java面向对象封装汽车
package com.hanqi; //汽车 public class Car { // 车牌 private String CheP; // 油箱容量 private double YouXRL ...
- java 面向对象 — 封装
- Java面向对象封装优化1_this(Python中的self)
1. 类 package cn.itcast.day06.demo03; /* 问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来. 解决方案:用private关键字将需要保护的成员变 ...
- Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数
面向对象 面向过程:对于面向过程思想,强调的是过程(动作). 面向对象:对于面向对象思想,强调的是对象(实体). 特点: 1,面向对象就是一种常见的思想.符合人们的思考习惯.2,面向对象的出现,将复杂 ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
随机推荐
- Ubuntu 快速安装配置Odoo 12
Odoo 12预计将于今年10月正式发布,这是一次大版本更新,带来了一些不错的新特性,如 文件管理系统(DMS) 用户表单中新增字段(Internal user, Portal, Public) HR ...
- videojs实现双击视频全屏播放、播放器全屏时视频未全屏
https://blog.csdn.net/staritstarit/article/details/78451963 暂停时只能使用左下角的暂停按钮,点击视频时不再响应 使用width和height ...
- centos6 nginx安装好以后,添加拓展ssl
前言 安装nginx的时候,只是执行最简单的安装,--user=nobody --group=nobody --prefix=/usr/local/nginx_1.8.1,没有安装http_ssl_m ...
- UICollectionView入门--使用系统UICollectionViewFlowLayout布局类
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rainbownight.blog.51cto.com/1336585/13237 ...
- LOJ10157——皇宫看守(树形DP)
传送门:QAQQAQ 题意:在一个树上放置守卫,使每一个节点都至少有相邻一节点放置守卫,使最终经费最少 思路:树形DP 首先会想到没有上司的舞会,0表示不放守卫,1表示放守卫,但考虑到对于当前点不放守 ...
- PAT甲级——A1005 Spell It Right
题目描述 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and out ...
- Maven实战08_仓库
何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...
- python 描述器
语法简析 一般来说,描述器(descriptor)是一个有”绑定行为”的对象属性(object attribute),它的属性访问被描述器协议方法重写.这些方法是 __get__(). __set__ ...
- Java超简明入门学习笔记(三)
Java编程思想第4版学习笔记(三) 第五章 初始化与清理(构造器和垃圾回收机制) Java有和C++类似的构造函数来为新创建的对象执行初始化及完成一些特殊的操作,有的类数据成员可能会 ...
- eclipse下项目复制改名注意事项
当在Eclipse下复制Web工程时 1.需要修改复制后新工程源码文件下 .settings 文件夹下的org.eclipse.wst.common.component中的内容为本工程名,明细如图: