###01get和set方法
* A.get和set方法
* 年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了,这样还是不行,那肿么办呢?按照之前所学习的封装的原理,隐藏后,还需要提供访问方式。只要对外提供可以访问的方法,让其他程序访问这些方法。同时在方法中可以对数据进行验证。
一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。
class Person {
// 私有成员变量
private int age;
private String name;

// 对外提供设置成员变量的方法
public void setAge(int a) {
// 由于是设置成员变量的值,这里可以加入数据的验证
if (a < 0 || a > 130) {
System.out.println(a + "不符合年龄的数据范围");
return;
}
age = a;
}

// 对外提供访问成员变量的方法
public void getAge() {
return age;
}
}
* 总结
* 类中不需要对外提供的内容都私有化,包括属性和方法。
以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问
* 注意
* 私有仅仅是封装的体现形式而已
###02私有化Person类带get,set
* 标准代码
package cn.itcast.demo05;

/*
* 类描述人:
* 属性: 姓名和年龄
* 方法: 说话
*
* 私有化所有的属性 (成员变量) ,必须写对应的get/set方法
* 凡是自定义的类,自定义成员变量,应该私有化,提供get/set
*
* this关键字:
* 区分成员变量和局部变量同名情况
* 方法中,方位成员变量,写this.
*/
public class Person {
private String name;
private int age;

// set方法,变量name,age赋值
public void setAge(int age) {
this.age = age;
}

public void setName(String name) {
this.name = name;
}

// get方法,变量name,age获取值
public int getAge() {
return age;
}

public String getName() {
return name;
}

public void speak() {
String name = "哈哈";
int age = 16;

System.out.println("人在说话 " + this.name + "..." + this.age);
}
}
* 标准测试代码
package cn.itcast.demo05;

public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
//调用set方法,对成员变量赋值
p.setAge(18);
p.setName("旺财");
p.speak();


//调用get方法,获取成员变量的值
// System.out.println(p.getName());
// System.out.println(p.getAge());
}
}

###03this关键字_区分成员变量和局部变量的同名
* A.什么时候用
* 当类中存在成员变量和局部变量同名的时候为了区分,就需要使用this关键字
* B.代码
class Person {
private int age;
private String name;

public void speak() {
this.name = "小强";
this.age = 18;
System.out.println("name=" + this.name + ",age=" + this.age);
}
}

class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
p.speak();
}
}

###04this内存图
* A.this内存图
* 见附件:this内存图.jpg

###01this的年龄比较
* A.需求:在Person类中定义功能,判断两个人是否是同龄人
* B.代码
class Person {
private int age;
private String name;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void speak() {
System.out.println("name=" + this.name + ",age=" + this.age);
}

// 判断是否为同龄人
public boolean equalsAge(Person p) {
// 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
// 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
/*
* if(this.age == p.age) { return true; } return false;
*/
return this.age == p.age;
}
}

###02随机点名器案例重构
* A.需求:随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息
它具备以下3个内容:
存储所有同学姓名
总览全班同学姓名
随机点名其中一人,打印到控制台
* B.代码
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
* 思路:
* 第一步:存储全班同学信息
* 第二步:打印全班同学每一个人的信息
* 第三部:随机对学生点名,打印学生信息
*/
public class Test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>(); //1.1创建一个可以存储多个同学名字的容器
//1.存储全班同学信息
addStudent(list);
//2.打印全班同学每一个人的信息(姓名、年龄)
printStudent(list);
//3.随机对学生点名,打印学生信息
randomStudent(list);
}
public static void addStudent(ArrayList<Student> list) {
//键盘输入多个同学名字存储到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//创建学生
Student s = new Student();
System.out.println("存储第"+i+"个学生姓名:");
String name = sc.next();
s.setName(name);
System.out.println("存储第"+i+"个学生年龄:");
int age = sc.nextInt();
s.setAge(age);
//添加学生到集合
list.add(s);
}
}
/**
2.打印全班同学每一个人的信息(姓名、年龄)
*/
public static void printStudent (ArrayList<Student> list) {
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println("姓名:"+s.getName() +",年龄:"+s.getAge());
}
}
/**
3.随机对学生点名,打印学生信息
*/
public static void randomStudent (ArrayList<Student> list) {
//在班级总人数范围内,随机产生一个随机数
int index = new Random().nextInt(list.size());
//在容器(ArrayList集合)中,查找该随机数所对应的同学信息(姓名、年龄)
Student s = list.get(index);
System.out.println("被随机点名的同学:"+s.getName() + ",年龄:" + s.getAge());
}
}

/**
* 学生信息类
*/
public class Student {
private String name; // 姓名
private int age; // 年龄

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

###03总结

* A.类与对象
* 类,用于描述多个对象的共同特征,它是对象的模板。
* 对象,用于描述现实中的个体,它是类的实例。
* 类的定义:使用关键字class来定义java中的类
* 格式:
* class 类名 {
* //属性
* 数据类型 变量名;
* …
* //方法
* 修饰符 返回值类型 方法名(参数){ }
* …
* }
*
* B.创建对象:
* 格式:
* 类名 对象名 = new 类名();

* C.封装(private关键字)
* 封装,把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
* 封装的体现:
* 变量:使用 private 修饰,这就是变量的封装
* 方法:也是一种封装,封装了多条代码
* 类: 也是一种封装,封装了多个方法
* D.private关键字,私有的意思
* 它可以用来修饰类中的成员(成员变量,成员方法)
* private的特点:
* private修饰的成员只能在当前类中访问,其他类中无法直接访问
* E.this关键字
* this关键字,本类对象的引用
* this是在方法中使用的,哪个对象调用了该方法,那么,this就代表调用该方法的对象引用
* this什么时候存在的?当创建对象的时候,this存在的
* this的作用:用来区别同名的成员变量与局部变量(this.成员变量)
* public void setName(String name) {
* this.name = name;
* }

Java语言学习day18--7月24日的更多相关文章

  1. python学习 day18 (3月25日)---( 面向对象浅析)

    面向对象思想: 字典表示对象: 不是太好 因为 变量 得一个个的赋值改值 {'name':'alex','blood':20,'attack':1,'sex':'不'} {'name':'太亮','b ...

  2. Java语言学习day01--6月28日

    Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...

  3. Java语言学习day02--6月29日

    Java语言学习day02###01常用的DOS命令 * A: 常用的DOS命令 * a: 打开Dos控制台 * win+r--cmd--回车 * b: 常用dos命令 * cd.. : 退回到上一级 ...

  4. SPSS 2019年10月24日 今日学习总结

    2019年10月24日今日课上内容1.SPSS掌握基于键值的一对多合并2.掌握重构数据3.掌握汇总功能 内容: 1.基于键值的一对多合并 合并文件 添加变量 合并方法:基于键值的一对多合并 变量 2. ...

  5. SQL PASS将于8月24日在北京中医药大学举办线下活动

    活动主题:复制架构的实现和调优以及SQL Server BI在传统行业的应用 地点:北三环东路11号 北京中医药大学 白色的1号楼教学楼后楼5层511房间 时间:2013年8月24日 9:00-12: ...

  6. 36.React基础介绍——2019年12月24日

    2019年12月24日16:47:12 2019年10月25日11:24:29 主要介绍react入门知识. 1.jsx语法介绍 1.1 介绍 jsx语法是一种类似于html标签的语法,它的作用相当于 ...

  7. 从通达信导出文件获取A股所有股票代号名称(至2020年2月24日)

    下文是讲述如何从通达信的输出文件中获得股票信息,如果想用Java爬虫从网页爬取信息请参考:https://www.cnblogs.com/xiandedanteng/p/12808381.html 要 ...

  8. 2016年12月24日 星期六 --出埃及记 Exodus 21:19

    2016年12月24日 星期六 --出埃及记 Exodus 21:19 the one who struck the blow will not be held responsible if the ...

  9. 2016年11月24日 星期四 --出埃及记 Exodus 20:15

    2016年11月24日 星期四 --出埃及记 Exodus 20:15 "You shall not steal.不可偷盗.

  10. 2016年10月24日 星期一 --出埃及记 Exodus 19:8

    2016年10月24日 星期一 --出埃及记 Exodus 19:8 The people all responded together, "We will do everything th ...

随机推荐

  1. 一个简单的用户态赋值语句,cpu都做了哪些操作

    如int a = 0;这样一个赋值语句,cpu做了哪些操作.

  2. [xnuca](web)xblog

    session会话机制介绍如下 http是无状态协议.服务器靠cookie和session来记住用户.$_SESSION 和 $_GET等一样,是超全局变量. 后台脚本里面会写: session() ...

  3. Java 线程池中 submit() 和 execute()方法有什么区别?

    两个方法都可以向线程池提交任务,execute()方法的返回类型是 void,它定义在 Executor 接口中. 而 submit()方法可以返回持有计算结果的 Future 对象,它定义在 Exe ...

  4. springmvc对前台参数的接收

    一.基本数据类型的接收 代码: @RequestMapping("/selectRegion") public BaseResult<?> method(String ...

  5. 如何通过HibernateDaoSupport将Spring和Hibernate 结合起来?

    用 Spring 的 SessionFactory 调用 LocalSessionFactory.集成过程分三步: 配置 the Hibernate SessionFactory. 继承 Hibern ...

  6. elasticsearch 的倒排索引是什么 ?

    解答:通俗解释一下就可以. 传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置. 而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表 即为倒排索引. 有了倒排索引,就能实现 ...

  7. 学习Apache(四)

    介绍 Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作.不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率. ...

  8. 学习openstack(八)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  9. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  10. 002.MEMS应用在开关电源上,实现大功率超小型化

    设计任务书 1.有关MEMS还有待具体了解 2.有关开关电源的目前难题也需要了解