Java基础---面向对象(2)

Java基础—面向对象(封装概述)

1.面向对象封装的基本概述和使用

(1).什么是封装的思想
定义一个基本的student类:
成员变量:name,age
成员方法:show()方法

测试类:
StudentDemo
创建student对象,并使用里面的方法

我们在定义这一个案例的过程中,我们发现一个问题:
通过对象去给成员变量赋值,可以赋值一些非法的数据,如年龄我们定义的是int类型,也就是说我们赋值200也是合理的,但是在实际当中,这一个是不合理的,我们应该需要做一个限制,应该是
这样子,我们在进行数据赋值之前,应该先对数据进行一个判断。但是这一个判断应该在哪里进行比较合理,在调用的时候,StudentDemo类已经是一个测试类,这里一般就是创建对象,并调用方法
所以我们应该在student类里定义这一个数据的校验。那么在Student类的哪一个位置进行这一个数据校验呢,因为做数据校验要依靠一些逻辑语句。逻辑语句应该在方法中定义,所以我们应该在
student的类中提供一个方法,来对数据进行校验。
我们给出了一个方法进行数据的校验,但是在使用的时候,它偏偏不调用方法来进行赋值,还是直接赋值了,也就是说我们所设置的校验方法没有起到作用,我们就该强制的要求要使用我们的方法
而不是直接调用成员变量来进行赋值。那么如何去强制要求不能直接使用成员变量呢?
正对着一种情况,我们可以使用java所提供的关键字private,使用private修饰成员变量,这样成员变量就只能够在本类中进行访问,而对外提供该成员变量的相应的getXXX()方法和SetXX()方法。

综上所述,我们这里面其实讲述的就是一个封装的过程以及封装的一个思想。

(2).封装
封装就是指隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式。也即是把成员变量的属性私有化(使用private修饰),再对外提供公共的访问方式(也就是响应的getXXX()方法和SetXX()方法)

(3).封装操作的基本代码实现

public class Student {
//姓名
private String name;
//年龄
private int age;

/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
if(age>120||age<0){
System.out.println("年龄有问题");
}else{
this.age = age;
}
}
}

(4).封装的好处和设计原则
A.好处:
掩藏实现细节,对外只提供公共的访问方式
提高了代码的复用性
提高安全性

B:原则
把不需要对外界提供的内容掩藏起来
把属性掩藏起来(也即是成员变量),提供公共的访问方法。

2.this关键字
this:表示当前类的对象的引用。简单的计,它就是代表当前类的一个对象。
注意:谁调用这一个方法,在该方法的内部的this就代表谁。

this的应用场景:
解决局部变量隐藏成员变量(由于使用的时候变量的使用遵循就近原则)

//使用举例:
public class Student {
//姓名
private String name;
public String getName() {
return name;
}

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

//代码使用详解
setName()这一个方法中,存在着俩个name,一个是成员方法里面的name,另一个是形式参数里面的name,那么在使用的时候是如何进行区分和参数的传递的呢?
由于参数的使用存在着就近原则,也就是说谁离我近,我就会把值赋给它,使用的时候参数的传递是这样的:
如:
Student s =new Student();
s.setName("小明");
参数的传递过程中,变量值小明先是传递给了setName(String name)中的name,之后,这一个name是this.name=name中的右侧name,由于this关键字表示的是当前类对象的使用,即
this.name=Student.name;也就是说传递给的是成员变量的:private String name中的name,这样我们在外部调用该类的时候就可以把我们需要的参数赋值给学生类对象中的成员变量。

3.程序代码解析:Student s=new Student(); 在内存中做了哪一些事情
(1).把方法区里面的Student.class加载到内存中
(2).在栈内存中为变量S开辟一个空间
(3).在堆内存中为学生对象申请一个空间
(4).给成员变量进行默认初始化--null,0
(5).给成员变量进行显示初始化--具体的参数进行赋值(小明-18)
(6).通过构造方法,给成员变量进行初始化,就是进行新的赋值(null,0--->小明,18)
(7).这一个时候如果你要访问内存中存在的值的话就是:小明,18
(8).然后就把堆内存中存储变量的地址赋值给栈中的Student s,初始化数据完毕。

4.static关键字

(1).基本概述
我们的定义一个学生类,由于姓名和年龄都是变化的,所以我们需要定义一个变量来接受,但是我们在使用的时候所有的学生的国际都是中国的,使用一样的国籍,我们在使用的时候每一次都还要
创建一个新的国籍,赋予相同的值,在堆内存中开辟空间,这样的话就会浪费资源。
针对多个对象有共同的成员变量的时候,也即是说可以共同使用同一个变量的时候,java提供了关键字static

(2).static关键字的特点
A:随着类的加载而加载(main方法也是static方法)
B:优先于对象存在
C:被类的所有对象所共享
如:一个班级公用一个编辑的编号
其实:这一个特点也就是告诉我们什么时候使用静态
如果说某一个成员变量是被所有的对象所共享的,那么它就该被定义为静态的。
实际举例:
饮水机(是一个班公用一个饮水机,应该使用静态修饰)
水杯 (每一个人需要有一个水杯,所以不应该被定义为静态修饰)
D:可以通过类名来调用
其实它本身也可以通过对象名来调用,这是因为它本身就是属于一个类的内部变量,而且还是公用的。

(3).static关键字的注意事项
A:在静态方法中是没有关键字this的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。所以前面进来的东西是不能够访问后面进来的东西。

B:静态方法只能够访问静态的成员变量和静态成员方法
静态方法
成员变量:只能够访问静态变量
成员方法:只能够访问成员方法

非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可以是静态的,也可以是非静态的成员方法

简单的记:
静态只能够访问静态。

(4).静态变量和一般成员变量的区别
A:所属不同
静态变量:静态变量属于类,所以也被称为类变量
成员变量:成员变量属于对象,所以也被称为实例变量(对象变量)

B:在内存中的位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存内

C:内存中出现的时间不同
静态变量随着类的加载而加载,随着累的消失而消失
成员变量随着对象的创建而创建,随着对象的消失而消失

D:调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能够通过对象来调用。

5.main方法讲解
puclic static void main(String[] args){......}

详解:
public:公共的,访问的权限是最大的,由于main()方法是被jvm调用,所以权限要够大。
static:静态的,不需要创建对象,通过类名即可调用,方便jvm调用。
void :因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm所调用,返回给jvm是没有意义的。
main:是一个常见的方法入口。大多数的语言都是以main()方法作为入口。
String[] args:这是一个字符串数组。值到哪里去了?这个东西到底如何使用?怎么给值?
最开始的时候这一个东西是为了接受键盘录入而是用的,其数据格式是:
java MainDemo hello world java

原文地址:https://www.cnblogs.com/nwxayyf/p/9479566.html

时间: 2024-10-24 12:10:09

Java基础---面向对象(2)的相关文章

Java基础——面向对象练习题

1.建立一个图形接口,声明一个面积函数.计算圆形和矩形的面积.注:体现面向对象的特征,对象值进行判断,用异常处理.不合法的数值需要出现"这个数值是非法的提示",不再进行运算. 2.在一个类中编写一个方法,这个方法搜索一个字符数组是否存在某个字符.如果存在则返回这个字符在数组中第一次出现的位置,否则返回-1.需要搜索的字符数组和字符都一参数的形式传递给该方法.如果传入的数组为NULL,则应该抛出IllegalArgumentException异常. 3.补充compare函数代码. 4.

java基础面向对象之封装

java基础面向对象之封装 2017-01-15 封装 1)封装性就是保证类内部被外部类不可见 2)所有属性都必须使用private关键字声明 3)封转后的属性如果要被外部所访问就必须实现set和get方法 例如: 使用了private声明的属性只有在自己的类是可见的 1 class Book{ 2 private String title ; //使用private声明的属性 3 private int price ; 4 } 5 public class PrivateDemo1 { 6 p

java基础面向对象之类与对象

java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 ?封装性:保护内部结构的安全性 ?继承性:在已有的程序结构上扩充新的功能 ?多态性:在某一个该娘范围内满足 2)面向对象开发分为以下几个步骤: OOA(面向对象分析) OOD(面向对象设计) OOP(面向对象编程) 2.类与对象 1)了解类与对象的关系 ?认识类与对象 类与对象是整个面向对象之中最基础的组成单元,类是共性的一个集合,而对象是某一

java基础面向对象之this关键字

java基础面向对象之this关键字 2017-02-14 this的核心概念: this关键字在java中表示当前对象. this关键字的主要用法: 在java中利用this关键字可以实现类属性的调用,类方法的调用,当前对象. 一.调用属性 1 class Book{ //Book类 2 private String title ; //title属性 3 private int price ; //price属性 4 5 public Book(String t , int p){ 6 ti

Java基础---面向对象(1)

Java基础--面向对象 1.什么是面向对象 面向对象是基于面向过程的编程思想. (1).面向过程: 面向过程强调的是每一个功能的步骤,强调的是如何实现的步骤. (2).面向对象: 面向对象强调的是对象,然后由对象去掉用功能,强调的是做这一个事情的结果. 2.面向对象的思想特点 (1).是一种更加符合我们思想习惯的逻辑. (2).可以将复杂的事情简单化 (3).将我们从执行者变成了指挥者. 3.面向对象举例 我们一洗衣服为例: 面向过程的实施步骤: 找出脏衣服--->放入盆中---->放入洗衣

Java基础面向对象

Java基础第七天 面向对象思想 类与对象及其使用 对象的内存图 成员变量和局部变量的区别 匿名对象 封装(private) this关键字 构造方法 static关键字 面向对象思想引入 前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性.在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中.这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?通过前面的

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

Java基础--面向对象

------- android培训.java培训.期待与您交流! ---------- 面向对象 是一种思想,把复杂事物简单化,把面向过程的执行者变成了指挥者.过程其实就是函数,而对象将函数和一些内容封装.把事物的属性和行为封装成对象,再把对象抽象成类. Java 面向对象的三个特征:封装.继承.多态 类 是一组事物共有特征和功能的描述.是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块.类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象.类只包含框架结

黑马程序员——Java基础---面向对象之继承

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                 面向对象之继承  一:继承(extends) (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构.