Java程序设计基础之面向对象(上)

(自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ)

(新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ)

目录

一、面向对象

(一)面向对象程序设计(Object Oriented Programming,OOP)

(二)包与类(package & class)

(三)对象、方法与属性(Object & Methods & Properties)

(四)方法(Method)

(五)构造器(Constructor)

一、面向对象

  (一)面向对象程序设计(Object Oriented Programming,OOP)

  1.在Java中,程序由面向对象为核心进行设计,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。 对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。 在面向对象的程序设计中,对象是组成程序的基本模块。

  2.理解:在Java中。如果要实现一个方法,那么首先,我们需要回答一些问题。1、这个方法所要做的事情是什么;2、这个方法的对象是谁;

   根据这两个问题,我们就拥有了创建一个方法最基础的两个元素:对象与成员方法,对象是指方法的实例化,即在一个具体的项目事件中的“谁”的问题,回答的就是问题2。除此之外【成员方法】也叫方法,回答的是“所作的事情是什么?”

   此外,在日常生活中的问题,我们通常是一群人做一些事情,那么我们“一群人”就是一个“类”,在这个类中,我们会拥有一些相同的特征,这个相同特征我们就称之为“属性”,也就是【成员变量】,而我们所作的事情,做事情的方法,在Java中我们用【成员方法】进行定义。而理解了“谁”在“做什么”,我们也就明白了面向对象的基本原理,也就是面向对象程序设计。

  3.面向对象的三个特性:封装、继承、多态(在下文中会具体谈到)

  (二)包与类(package & class)

  1.理解:Java中,可以用包对类进行分类存储。包与类的形式类似于我们日常使用文件的文件夹的形式,文件 = 类,文件夹 = 包;

  2.包名:包名一律用小写完成,如果多个单词则直接连接,如:methodloading、methodcall;

  3.类名:类名一般除了每个单词外都用小写完成,单词首字母用大写,如果多个单词则直接连接,如:MethodLoading、MethodCall;

  4.包的使用:

   包:包中可以继续创建包,构成包的叠加,表示方法:package01.package02.package03……使用小数点进行连接;

   引包:包的调用,需要用到关键词import,如果要调用包的所有文件,则使用 * ;即:

    import package01;  
    import package01.package02;  
    import package01.*;

   第二种引包的方式:在实例化时,实例化对象中加入包名,即可完成调用,即:

    package01.getAge a = new package01.getAge;

  5.类的使用:

   类的写法:修饰词 class 类名{  };

   类的修饰词:abstract  final  private  public;  (暂时还没学到,先不做记录,插个眼罢)

   类的关键词:extends关键词,通过extends可以将两个类进行父子类的定义,即将extends前类定义为extends后类的子类

         

  (三)对象、方法与属性(Object & Methods & Properties)

  1.对象:前文说到,对象在Java中是方法的实例化,定义一个新对象,就能对方法进行执行、调用等一系列的操作。换而言之,如果要使用调用方法,则一定要实例化对象。毕竟,只是有模板还不够,要实现具体的东西,仍然要往树丫上填上绿叶与红花。

  2.方法:在Java中,我们会把要做的事情放入方法中,然后把这个方法进行【封装】,当下一次要用到时,可以进行调用或是【继承】。

  3.属性:除了方法以外,我们的每一个对象都会有不同的属性,这些属性在很大部分中可能都是重复的,这个时候我们所准备的属性就可以重复进行调用,节约很多的内存冗余。这种【继承】的思想,也是Java面向对象中的重要思想。

   Example01.有一个代表着人类的Person类,他的属性有name名字、age年龄、sex性别等,他也有方法可以打印name、age、sex;此时,我们有一个新的类Student,他自然也需要属性name名字、age年龄、sex性别等,这时,我们就可以从Person类中直接调用这些属性,当然,也可以调用Person类中的方法。

  4.属性的写法:修饰词 类型 属性名;(可以赋值,也可以不赋值。当不赋值时,会自动生成一个为0、null、false……的值)

    修饰词:由大到小依次为public  protected  default(缺省)  private

        //修饰词所能使用的范围:

修饰词 类 包 子类 任何地方
private √      
default √ √    
protected √ √ √  
public √ √ √ √

  5.方法的写法:修饰词 返回值 方法名(  ){  }

   static:静态方法只能调用静态变量与静态方法;

   返回值:当返回值为void的时候,方法内不需要写返回值,此时表示返回0;当返回值为一个确定的类型时,如String、double等,需要手动添加返回值return,返回值必须与确定的类型相同。

   小括号:小括号中是可以加变量的,此时加入进去的变量被称为形参,形参进行书写时,格式是(数据类型 形参名),同时如果不需要形参时,括号可以为空但不能不写。

   大括号:大括号中的内容就是方法的具体内容;

  6.对象的实例化:类名 对象名称 = new 类名();

   实例化时,前后类名可以不进行对应,此时情况为前后类为父子类。前类为父类,后类为子类。此时如果进行调用,那么调用的如果时成员变量,不能调用子类中的成员变量,只能在父类的成员变量中进行调用(一个引用类型变量如果声明为父类的类型,但实际引用的是子类的对象,那么该变量就不能再访问子类中添加的属性和方法。)。如果此时调用的成员方法,那么调用的方法是子类中的方法而不是父类,也就是后类的方法。

  (四)方法(Method)

1.方法也称成员方法,他类似于函数,用于描述对象的行为;

   2.方法的调用:图解(还没画)JVM模型

3.方法的可变个数的参数:

   方法一:数组

   我们定义一个数组,通过往数组中添加成员变量来完成可变个数的参数的记录

public class Person {
public void printInfo(String[] args){
for(int i = 0 ; i < args.length ; i++){
System.out.println(args[i]);
}
}
} public static void main(String[] args) {
Person p = new Person();
//通过数组定义,输入字符串数组args,实现方法的可变个数的参数
String[] x = new String[]{"Tom","10","男"} ;
p.printInfo(x);
//如若进行新参数的定义,则进行新数组的定义即可实现
String[] y = new String[]{"北京省xxx","13100225588","530225312052552"} ;
p.printInfo(y);
}

   方法二:Java特定的迭代方式

   我们通过特定的方式“...”来对参数实现可变个数的记录

public class Person {
public void printInfoo(String... args){
for(int i = 0 ; i <args.length ; i++){
System.out.println(args[i]);
}
}
} public static void main(String[] args) {
p.printInfoo("张三","18","女","云南省xxx","18055663322","568759522568555");
}

  4.方法的重载:Java中,允许在一个程序中定义多个名称相同,但是参数的类型或个数不同的方法,这就是方法的重载

public class test03 {
//方法的重载
public void mOL (int x){
System.out.println("x="+(x*x));
} public void mOL(int x,int y){
System.out.println("x="+(x*x+y*y));
} public void mOL(String x){
System.out.println("x="+x);
} public static void main(String[] args) {
test03 t = new test03();
t.mOL(2);
t.mOL(6,5);
t.mOL("Tom");
}

  5.方法的递归:在Java中,一个方法的内部调用自身的过程

   需要注意的是,递归必须要有结束条件,不然就会陷入无限递归的状态,永远无法结束调用;

   每次递归都需要逐步递减,直到有结束值;

public static int getSum(int n){
if(n == 1){
return 1;
}
int temp = getSum(n - 1);
return temp + n;
} public static void main(String[] args) {
int sum = getSum(4);
System.out.println("Sum = " + sum);
}

  6.匿名调用

  匿名调用方式: 类名 对象名 = new 调用类名().方法名();

public class Circle {
public double area(double r){
return r*r*3.14;
}
} public class test02 {
public static void main(String[] args) {
//匿名调用测试
double area = new Circle().area(3);
System.out.println("半径为3的圆的面积为:" + area);
}
}

  7.toString()方法

   (1)toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址;

   (2)在进行String与其它类型数据的连接操作时,自动调用toString()方法;

Person p = new Person;
System.out.println("p=" + p);
//这两句相等;
System.out.println("p=" + p.toString());

   (3)可以根据需求在用户自定义类型中重写toString类方法;

   (4)基本类型数据转换为String类型时,调用了对应包装类的toString()方法;

  (五)构造器(Constructor)

  1.构造器也就是构造方法,在Java中,构造方法在类实例化对象时会被自动调用,可以把他看作类的一个特殊成员;

  2.构造器的写法:修饰词 方法名(  ){  }

  3.条件要求:完成构造方法需要同时满足以下三个条件

   方法名与类名相同;

   在方法名的前面没有返回类型的声明;

   在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束。

  4.构造器的重载:方法可以重载,构造方法也可以重载

   在构造器中对方法进行输入,直接使用 new 类名 即可完成;

//构造器重载
//使得对象的创建更加灵活,方便创建各种不同的对象
//构造器重载,参数列表必须不同
public class Person {
public Person(int a){}
public Person(String b){}
public Person(int a,String b){}
} public class test {
public static void main(String[] args) {
new Person(10);
new Person("张三");
new Person(30,"李四");
}
}

程序设计基础·Java学习笔记·面向对象(上)的更多相关文章

  1. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  2. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  5. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  6. 0021 Java学习笔记-面向对象-包、构造器

    封装 面向对象的三大特征: 封装 继承 多态 封装: 将对象的状态信息隐藏,不允许外部程序直接访问 通过该类提供的方法来访问和操作 有啥用: 隐藏类的实现细节 在方法中加入控制逻辑,限制对成员变量的不 ...

  7. java学习笔记 --- 面向对象2

    一.匿名对象 (1)没有名字的对象 (2)应用场景   A:调用方法,仅仅只调用一次的时候. class Car { //描述属性.颜色,轮胎数. String color; int number; ...

  8. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  9. 0019 Java学习笔记-面向对象-方法

    方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...

随机推荐

  1. DockerClient端与DockerDaemon的通信安全

    DockerClient端与DockerDaemon的通信安全 容器的安全性问题的根源在于容器和宿主机共享内核.如果容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃.与虚拟机是不同的,虚拟 ...

  2. shell脚本三剑客之awk

    shell脚本之awk命令 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 适合小型文本数据 1.工作原理 2.AWK格式 3.按行输入文本 4.按字段输入文本 5.通过管道符号,双引号调 ...

  3. 从零开始学mitmproxy抓包工具

    Man In The Middle mitm是Man In The Middle的首字母缩写,意思是位于中间的人,表明mitmproxy是一个代理,可以拦截请求,实现网络抓包.知名的网络抓包工具有Fi ...

  4. Anacanda 与 jupyter 的使用

    内容概要 爬虫开发环境搭建 Anacanda 开发环境 jupyter jupyter 的基本使用 启动 基本使用 快捷键的使用 内容详细 一.爬虫开发环境搭建 1.Anacanda 开发环境 Ana ...

  5. Solution -「CF 848D」Shake It!

    \(\mathcal{Description}\)   Link.   初始有一个有向图 \(G=(V,E)\),\(V=\{s,t\}\),\(E=\langle s,t\rangle\),一次操作 ...

  6. 在ABP VNext框架中处理和用户相关的多对多的关系

    前面介绍了一些ABP VNext架构上的内容,随着内容的细化,我们会发现ABP VNext框架中的Entity Framework处理表之间的引用关系还是比较麻烦的,一不小心就容易出错了,本篇随笔介绍 ...

  7. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  8. c++ 动态内存 动态数组

    动态内存-动态数组 习题12.23 //连接字符串到动态数组 char *c = new char[20](); char a[] = "hello "; char b[] = & ...

  9. WebKit Inside: DOM树的构建

    当客户端App主进程创建WKWebView对象时,会创建另外两个子进程:渲染进程与网络进程.主进程WKWebView发起请求时,先将请求转发给渲染进程,渲染进程再转发给网络进程,网络进程请求服务器.如 ...

  10. blender导入灰度图生成地形模型

    安装软件 在此处下载blender并安装. 添加平面 1.打开blender,右键删除初始的立方体. 2.shift+a选择平面添加进场景: 3.按下s键鼠标拖动调节平面大小确定后按下鼠标左键: 4. ...