Java学习笔记--关于面向对象的思考
1.不可改变的类生成对象以及变量的范围
2. 关键词this的使用
3.用类抽象的思想制作软件
4.通过关系模型建立类
5.使用面向对象的范例来设计程序,遵循类设计指导。
已经学习了:怎么定义类已经创建对象,还有就是通过Java API 来使用类。
1.不可变的类和对象
正常来说,我们使用类的时候都是为了生成一个对象,允许在以后更改对象的内容,但是有时候会要求不能改变他的内容。比如我们记录学生档案的时候,又或者是个人简历的时候,有些档案比如出生日期,一旦是确定的不会去更改,但是学历,工作经验会随着个人的成长而改变。Java中也有一些类是不会变的,前面提到String类,里面的内容一般是会变的,改变的时候参考这个值的String 变量所指向的字符串。只需要将数据区私有,然后在公共的方法上不能够更改这些信息,就实现了我们的目标。在类里面数据区的变量只能声明一次,但是在方法中的不同程序块变量可以声明很多次。
例子
public class circle{
private int x = 0;
private int y = 0;
public circle(){
}
public void p(){
int x = 1;
system.out.println("x = " +x);
system.out.println("y = " +y);
}
}
此时对比x和y的输出的值,可以发现在p方法中的x的值已经改变,但是y的值没有改变,也就是后来在方法中 定义的x ,他的作用域就在方法p中。为了避免混淆犯错,不要在方法里面使用本地变量或者是静态变量,除了是用方法来传递参数的位置。
2. 关键词this的使用
关键词this的使用,this是一个参考的名称,它指向的是唤醒这个对象的它本身,最直接的就是用来参考类本身的隐藏数据区。
public class Circle{
int x = 10;
static double k = 11;
void setX(int x){
this.x = x;
}
static void setK(double k){
Circle.k= k;
}
}
通过关键词this可以得到对象,然后唤起实例,this.x = x就是要让参数的x赋值到唤起的对象的数据区,如果说将this的用法改成 this(abc),也就可以理解为这个类的构造方法。
3.用类抽象的思想制作软件
类的抽象和封装。类的抽象就是使用类,并且实现类之中的一部分内容,创建这个类必须要让用户知道它是如何使用的,方法和数据可以从外部和类中的到。类的实现的思想,对于客户机而言,类就像一个黑盒,使用的时候将这些抽象出来,然后得到方法和内容的签名。客户端通过抽象类来使用。生活中将电脑细分为很多部分,CPU,内存,硬盘,主板。每个部分都是一个对象,每个部分都有属性和方法,为了整合起一整台计算机,我们必须要知道每个部分是怎么使用的,以及它们之间是如何交互,内部的东西已经封装起来了,我们不必去了解每个触发器,锁存器是怎么工作的,只需了解整体的模块功能。
也就是说 1 开发类和使用类是两种独立的任务
2 可以跳过复杂的类来,然后学习整个工程
3 通过使用类可以更好地知道怎么来实现
面向对象的思想:
public static double gerBMI(double weight, double height)
这个方法,可以计算我们身体的BMI值,然后还是很有限,因为的到这些信息以后,我们日常使用时,作为某个人身体情况的衡量指标,这些信息就要和这个人的其他信息连接起来,此时可以按照以下的例子创建类:
String name;
int age;
double weight;
double height;
BMI(name: String , age: int ,weight:double, height: double)
getBMI
对象也可以包含另外一个对象,就像上面一个BMI的例子中写的一样,在BMI中就有关于String类生成的字符串,类之间的关系也有很多种,比如以下三个类
学生类,姓名类,家庭地址类。一个学生对应一个名字,但是可能会有两个学生的地址是一样的,这个地址由这两个学生共享,也就是通过关系的模型来建立类。
public class Name{
...
}
public class Student{
private Name name;
private Address address;
}
public class Address{
...
}
4.通过关系模型建立类
例子:设计一个课程Course 类
数据区: courseName: String、 students[]: String 、 numberOfStudent: int
方法区: 构造方法Course(courseName: String) ,getCourseName():String, addStudent(student:String): void, dropStudent(student: String):void、 getStudents():String[] ,getNumberOfStudents(): int
在这个Course类中可以看到数据结构的影子,一组数据,以及在这组数据上的关系的集合,有点像线性表。
Student.java
public class student {
private String Name;
public student(String na){
this.Name = na;
}
public String getName()
{
return Name;
}
}
Course.java
public class Course {
private String CourseName;
private student[] stu;
private int numberOfStudent;
public Course(String courseNa){
CourseName = courseNa;
numberOfStudent = 0;
stu= new student[20];
}
public String getCourseName(){
return CourseName;
}
public void addStudent(student s){
int i = numberOfStudent;
i++;
stu[i] = s;
numberOfStudent++;
}
public void DropStudent(student s){
numberOfStudent --;
}
public String GetStudent(int i){
return stu[i].getName();
}
public int getNumberOfStudent(){
return numberOfStudent;
}
}
main.java
public class Main {
public static void main(String[] args){
Course cou = new Course("math");
student stu1 = new student("xiao ming");
student stu2 = new student("Da ming");
cou.addStudent(stu1);
cou.addStudent(stu2);
System.out.println("The Course Name is "+ cou.getCourseName());
System.out.println("The number of student is "+ cou.getNumberOfStudent());
System.out.println("The List :\n"+cou.GetStudent(1));
System.out.println(cou.GetStudent(2));
}
}
5.使用面向对象的范例来设计程序,遵循类设计指导。
一个对象应该是描述单一整体,类的操作应该在逻辑上有连贯性的目的。例如你可你将学生加入一个班级,但是不要将员工和学生都加到同一个班级里去,之前学习的String,StringBuilder,StringBuffer,都是用来解决字符串的问题,String用来处理不变的字符串,StringBuilder用来创建可变的字符串,StringBuffer可StringBuilder相似,但是可以StringBuffer包含了synchronized的方法用来更新字符串。
高内聚低耦合,前后一致连贯。
摘自百科:
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
Java学习笔记--关于面向对象的思考的更多相关文章
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- 【原】Java学习笔记014 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 面向对象思想 // ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- 【原】Java学习笔记019 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- java 学习笔记2 面向对象(上)
类和对象 类是某一批对象的抽象,可以把类理解成某种概念.对象是一个具体存在的实体.类和对象是面向对象的核心. 类定义的是多个实例的特征,类不是具体存在,实例才是具体存在. 定义类(class)的语法: ...
- 【原】Java学习笔记020 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...
- 【原】Java学习笔记017 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系中的pri ...
随机推荐
- Django框架之第三篇模板语法
一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...
- SVN使用技巧和参考文档总结
以下文章为网上收集: myEclipse 8.5下SVN环境的搭建(重点推荐) SVN建立版本库,配置用户和权限 Tortoise SVN使用方法,简易图解 版本控制软件SVN使用方法详解 学习笔记 ...
- python-queue知识点
1.dict获取value dict.get(key_name)2.三元运算 res,err=stdout.read(),stderr.read() #三元运算 result=res if res e ...
- LoadRunner 参数模拟——快速得到并发用户的进场规则
LoadRunner 并发时,一般需要进入参数化 用户名或者相关的字段数据,用以满足在并发时无限的接近真实的使用场景: 但当你在设置好参数化的读取规则后,在执行并发场景时,用户并发加载顺序是否确实如你 ...
- p1198&bzoj1012 最大数
传送门(洛谷) 传送门(bzoj) 题目 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数 ...
- 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计
- 23.通过MS17_010来学习msf对渗透的利用
Metersploit 集成了渗透阶段的全部利用,从漏洞探测,到漏洞利用,最后到后渗透阶段.本次博客主要抛砖引玉,通过对MS17_010漏洞的复现,来学习Metasploit. 漏洞环境: 靶机:wi ...
- CodeForces 116B【二分匹配】
思路: 暴力..我不会呀.. YY一个二分匹配嘛,然后数组开小了.GG for an hour. #include <bits/stdc++.h> using namespace std; ...
- 反射实现增删改查(DAO层)——修改数据
先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 修改数据 * */ @Override public void updateObject(Object object, Strin ...
- cf804C(dfs染色)
题目链接: http://codeforces.com/problemset/problem/804/C 题意: 有一颗含有 n 个顶点的树, 第 i 个顶点上有 k 个冰激凌, 每个冰激凌的种类为 ...