【Java学习笔记二】——对象与类

声明:本文章内容主要摘选自尚硅谷宋红康Java教程、《Java核心卷一》、《Java语言程序设计-基础篇》,示例代码部分出自本人,更多详细内容推荐直接观看以上教程及书籍,若有错误之处请指出,欢迎交流。

PS:本篇笔记仅作为对象与类的先导文章,介绍有关类的相关知识点大纲,最后在介绍一些Java对象的特征,类的特征将于后面的笔记中具体介绍。

面向过程(POP)与面向对象(OOP)二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象的两个要素

类(class):对一类事物的描述,是抽象的、概念上的定义
对象(object):是实际存在的该类事物的每个个体,因而也称为实例(instance)

面向对象的三大特征

封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)

类的成员构成

属性(Field):对应类中的成员变量
行为(Method):对应类中的成员方法
代码块(block):由一对大括号括起来的若干条简单的Java语句
内部类(inner class):定义在另一个类中的类

java中的名称命名规范

包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

方法与对象的相关知识点补充

一、方法(即行为)的重载(overload)loading

1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
“两同一不同”:同一个类、相同方法名
参数列表不同:参数个数不同,参数类型不同
2.举例;Arrays类中重载的sort()/binarysearch()
3.判断是否是重载:
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

//4个重载的方法
class OverloadTest{
      public int plus(int a, int b){
            return a + b;
      }
      public double plus(double a, double b){
            return a + b;
      }
      public double plus(int a, double b){
            return a + b;
      }
      public double plus(double a, int b){
            return a + b;
      }
}
//调用时,随意填入任何int或double类型的变量都可以
int a = 5;
int b = 8;
double c = 11.4;
double d = 19.23;
int result1;
double result2;

result1 = plus(a, b);
result2 = plus(c, d);
result2 = plus(a, d);
result2 = plus(c, b);

//以下方法均构成重载
void play(int a, double b){};
void play(int a, char b){};
double play(int a, double b, char c){};
boolean play(char a){};

4.值传递机制:
如果参数是基本数据类型(int,double等),此时实参赋给形参的是实参真实存储的数据值。
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
故要改变传入类中的形参(基本数据类型)的值时必须包装成引用数据类型(String, 类等)。

浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。
深拷贝是在引用方面不同,深拷贝就是创建一个新的和原始字段的内容相同的字段,是两个一样大的数据段,所以两者的引用是不同的,之后的新对象中的引用型字段发生改变,不会引起原始对象中的字段发生改变。

二、对象与对象变量

一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。下列语句:
Date deadline=new Date();有两个部分。表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量deadline中。
可以显式地将对象变量设置为null,表明这个对象变量目前没有引用任何对象。
如:
deadline = null;
if(deadline != null) System.out.println(deadline);

如果将一个方法应用于一个值为null的对象上,那么就会产生运行时错误。
birthday =null; String s=birthday.toString(); //runtime error!

C++注释:很多人错误地认为Java对象变量与C++的引用类似。然而,在C++中没有空引用,并且引用不能被赋值。可以将Java的对象变量看作C++的对象指针。例如,Date birthday;//Java
实际上,等同于Datebirthday;//C++
一旦理解了这一点,一切问题就迎刃而解了。当然,一个Date
指针只能通过调用new进行初始化。就这一点而言,C++与Java的语法几乎是一样的。
Date*birthday =new Date();//C++
如果把一个变量的值赋给另一个变量,两个变量就指向同一个日期,即它们是同一个对象的指针。在Java中的null引用对应C++中的NULL指针。
所有的Java对象都存储在堆中。当一个对象包含另一个对象变量时,这个变量依然包含着指向另一个堆对象的指针。
在C++中,指针十分令人头疼,并常常导致程序错误。稍不小心就会创建一个错误的指针,或者造成内存溢出。在Java语言中,这些问题都不复存在。如果使用一个没有初始化的指针,运行系统将会产生一个运行时错误,而不是生成一个随机的结果。同时,不必担心内存管理问题,垃圾收集器将会处理相关的事宜。

此笔记仅针对有一定编程基础的同学,且本人只记录比较重要的知识点,若想要入门Java可以先行观看相关教程或书籍后再阅读此笔记。

最后附一下相关链接:
Java在线API中文手册
Java platform se8下载
尚硅谷Java教学视频
《Java核心卷一》

posted @ 2020-07-21 16:14  洛水凌云  阅读(119)  评论(0编辑  收藏  举报