/*
定义一个学生类:
成员变量:name,age
成员方法:show()方法 在使用这个案例的过程中,发现了一个问题:
通过对象去给成员变量赋值,可以赋值一些非法的数据。例如:name你赋值了一个30整型数据
这是不合理的。
应该是这个样子的:在赋值之前,先对数据进行判断是什么样的类型。
判断到底在哪里做比较合适呢?
StudentDemo类是一个测试类,测试类一般(只创建对象,调用方法。)
所以,这个判断应该定义在Student类中完成。
而我们在成员变量的位置可不可以进行数据判断呢?
是不可以的,因为做数据校验,必须要依靠一些逻辑语句。
逻辑语句是应该定义在方法中的,所以,我们最终决定在Student类中提供一个方法setAge()
来对数据进行校验。 按照前面的分析,我们给出了一个方法进行校验。
但是呢,它偏偏不调用方法来赋值,还是直接赋值了,
这样方法就没有起到作用。
要求你必须使用方法去给成员变量赋初值,而不能直接调用成员变量赋值。
怎么去强制要求不能直接使用成员变量?
针对这种情况,Java就提供了一个关键字 private private:私有的。可以修饰成员变量和成员方法。
注意:被private修饰的成员只能在本类中访问。 其实写到现在讲解的是一个封装的思想。
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。这个公共往往是提供方法的方式
*/
class Student {
//姓名
String name;
//年龄
private int age;//只能通过本类调用,且只能通过本类方法来赋值,不可以直接赋值。 //写一个方法对数据进行校验
/*
返回值类型:void
参数列表:int a
*/
public void setAge(int a) {
if(a < 0 || age > 120) {
System.out.println("你给的年龄有问题");
}else {
age = a;
}
} //show()方法,显示所有成员变量值
public void show() {
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
} class StudentDemo {
public static void main(String[] args) {
//创建学生对象
Student s = new Student();
s.show();//引用类型的数据是有默认值的
System.out.println("--------------"); //给成员变量赋值
s.name = "林青霞";
//s.age = 27;//定义了age为private这个语句就会报错。因为private为私有变量,私有的成分只能在本类中对他操作。
s.setAge(27);
s.show();
System.out.println("--------------"); //给age赋值
//s.age = -27; //这个数据是不合理的,报错
//通过方法给值
s.setAge(-34);//因为有校验,所以根本赋不了值
s.show();//这里输出正确的年龄和姓名,按照上边已经赋值的27输出。
System.out.println("--------------");
}
}
结果如下:

接着再进一步了解private:

/*
private:
是一个(权限修饰符)
可以修饰成员变量和成员方法
被其修饰的成员(只能)在(本类)中被访问
*/
class Demo {
//int num = 10;
//用private修饰
private int num = 10; public void show() {
System.out.println(num);//被private修饰的num变量只能在本类中访问,这是合法的
} private void method() {//method方法被private修饰了
System.out.println("method");
} public void function() {
method();//被private修饰的method()方法,只能在本类中访问,这是合法的
}
} class PrivateDemo {
public static void main(String[] args) {
Demo d = new Demo();
//不能访问私有的成员变量,只能在那个类中被访问,报错。不能直接访问,但是可以间接地通过调用该类中的其他方法对其调用
//System.out.println(d.num);
d.show();//对象调用方法 10
//不能访问私有的成员方法,因为private修饰了,只能在那个类中被访问,报错。不能直接访问,但是可以间接地通过调用该类中的其他方法对其调用
//d.method();
d.function();//对象调用function方法,间接地调用method。让function方法调用实现在该类中被private修饰的method()方法
}
}

接着用一个实例显示整个过程加深印象:

/*
封装和private的应用:
A:把成员变量用private修饰
B:提供对应的getXxx()(get值要有返回值)和setXxx()(set值不需要返回值)方法
*/
//定义学生类
class Student {
//姓名
private String name;
//年龄
private int age; //姓名获取值
public String getName() {
return name;
} //姓名设置值
public void setName(String n) {
name = n;
} //年龄获取值
public int getAge() {
return age;//该age来自于成员变量的值
} //年龄赋值
public void setAge(int a) {
age = a;//这里给成员变量赋值
}
} //测试类
class StudentTest {
public static void main(String[] args) {
//创建学生对象
Student s = new Student(); //使用成员变量
//错误:被私有修饰了,外界不能直接访问了,报错输出:name可以在Student中访问private
//System.out.println(s.name+"---"+s.age);
System.out.println(s.getName()+"---"+s.getAge());//null 0 //给成员变量赋值,被私有修饰了,外界不能直接访问了。报错name可以在Student中访问private
//s.name = "林青霞";
//s.age = 27;
//通过方法给赋值
s.setName("林青霞");//通过对象调用方法,到该方法中去给(该类中)的成员变量赋值是正确的。
s.setAge(27);
System.out.println(s.getName()+"---"+s.getAge());
}
}

谢谢关注,留下您的见解、指正与批评。

下一集为java中的this关键字......

《java入门第一季》之面向对象(private关键字与封装概念的初探)的更多相关文章

  1. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  2. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  3. 《java入门第一季》之面向对象(谈谈接口)

    软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...

  4. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  5. 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)

    根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...

  6. 《java入门第一季》之面向对象this关键字

    /* 起名字要做到见名知意. this:是当前类的对象引用.简单的记,它就代表当前类的一个对象. 注意:谁调用这个方法,在该方法内部的this就代表谁. this的场景: 解决局部变量隐藏成员变量 * ...

  7. 《java入门第一季》之面向对象(final关键字)

    /* final可以修饰类,方法,变量 特点: final(可以修饰类),该(类)(不能被继承).一旦修饰了一个类,这个类就不能被继承了! final以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...

  8. 《java入门第一季》之面向对象(static关键字)

    /* static的特点:(它可以修饰成员变量,还可以修饰成员方法) A:随着类的加载而加载 回想main方法. B:优先于对象存在 C:被类的所有对象共享 举例:班级的学生应该共用同一个班级编号. ...

  9. 《java入门第一季》之面向对象面试题(fianl关键字)

    /* 面试题:final修饰局部变量的问题 基本类型:基本类型的值不能发生改变. 引用类型:引用类型的(地址值)(不能发生改变),但是,该对象的堆内存的值是可以改变的. */ class Studen ...

随机推荐

  1. Linux 中交换空间 (swap)应该分多大才好?

    前一段时间,我们机房中一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,让我过去处理一下这一问题,登录到服务器之后,发现此服务器的物理内存是16G,而最初装机的时候,系统管理人员却只分配了4G ...

  2. Linux基础指令

    Linux基础指令 只写了最简单的一些文件操作,基本没有带参数 查看当前目录 pwd 跳转到某路径 cd 查看当前目录下的文件 ls ls -l // -l 查看详细信息 打开当前所在文件夹 open ...

  3. Mac入门——快捷键

    快捷键: 截图 Shift+Command+3  截取全屏幕至桌面 Shift+Command+4  截取部分屏幕至桌面 Shift+Command+4+空格 截取窗口或原件至桌面 Shift+ ...

  4. Gazebo機器人仿真學習探索筆記(四)模型編輯

    模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...

  5. Struts 2 之拦截器

    拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Progr ...

  6. 什么时候App委托会收到App进程被结束的消息

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们在Xcode建立的新项目后,在AppDelegate类会发 ...

  7. UI设计--->全心全意为人民服务的宗旨---->注重客户体验--->软件持久的生命力

    UI即User Interface(用户界面)的简称.UI设计是指对软件的人机交互.操作逻辑.界面美观的整体设计.好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适简单.自由,充分体现 ...

  8. Dynamics CRM 在Visual Studio中开启XML编辑的智能提示

    对于.net开发人员来说Visual Studio这一开发工具自然是再熟悉不过,它强大的功能给我们的编程带来了极大的方便,代码智能提示就属其中一项. 在Dynamic CRM的开发中在各种工具出来之前 ...

  9. (一一〇)正则表达式的基本使用与RegexKitLite的使用

    正则表达式常常用于匹配关键字,下面先介绍基本语法. [基本语法] ①中括号表示满足其中之一即可,例如[abc],则这个位置可以是a.b.c中任意一个. ②在中括号中,可以通过-连接范围,例如a-z:多 ...

  10. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...