java基础之面向对象

  • 学习目标
  • 第1章 面向对象思想
    • 1.1 面向对象思想介绍
      • 2、类和对象
  • 第二章 类与对象
    • 1、类的定义
      • 2、类的使用
      • 3、类的练习
      • 4、内存分析
      • 5、两类变量
  • 第三章 方法
    • 3.1 方法概述
      • 3.1.1 Java方法引入
      • 3.1.2 方法定义
      • 3.1.3 方法练习
      • 3.1.4 定义方法的注意事项
    • 3.2 main()方法详解
    • 3.3 注意事项
  • 第四章 方法重载
    • 1、理论说明
    • 2、案例代码
    • 3、判断重载
  • 总结:
  • 用本博主的一句话来描述面向对象与面向过程: ==“面向对象:白嫖!!!”== ==“面向过程:亲力亲为!!!”==

学习目标

1、理解Java面向对象的思想
2、掌握类与对象的定义和使用
3、掌握成员变量与局部变量的区别
4、掌握方法的定义与使用
5、掌握方法的参数传递
6、掌握方法重载的定义与使用

第1章 面向对象思想

1.1 面向对象思想介绍

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。
这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。
它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

面向对象思想总结:1.面向过程:当要实现一个功能时,需要亲力亲为,处理每个细节2.面向对象:当要实现一个功能时,不关心具体的实现步骤,只关心结果,找一个具有该功能的类,帮我们做事3.面向对象的思想(1)面向对象是基于面向过程的编程思想.(2)面向过程:强调的是每一个功能的步骤(3)面向对象:强调的是对象,然后由对象去调用功能4.特点(1)是一种更符合我们思考习惯的思想(2)可以将复杂的事情简单化(3)角色发生了转换,将我们从执行者变成了指挥者

我的理解:

原始代码的思想?

public class Demo{public static void main(String[] args){int[] array = {11,22,33,44,55};//循环遍历数组System.out.print("[");for(int i=0;i<array.length;i++){if(i == array.length-1){System.out.print(array[i]+", ");}else{System.out.println(array[i]+"]");}}}
}

所有的事情,亲力亲为,代码编写相当的复杂。

面向对象思想?

import java.util.Arrays;
public class Demo{public static void main(String[] args){int[] array = {11,22,33,44,55};System.out.println(Arrays.toString(array));}
}

相比之下,面向对象的思想,请人帮我做事情,程序更加的简单化。

举例说明:

1. 面向过程:自己饿了自己做饭的例子
2. 面向对象:自己饿了点外卖的例子

2、类和对象

什么是类?什么是对象?

下图展示出来的就是设计图纸和实体之间的关系
那么什么是类?

类:是一组具有类似属性和行为的组合。

  • 属性:这个事物的特征他是什么?(车子的价格、车子的颜色、车子的座位数量等)
  • 行为:这个事物的功能他可以做什么?(车子可以代步、车子可以载物)

这里的车辆设计图纸就相当于是一个Java类,他规定了车子的尺寸大小、车子的颜色等信息,同时还指定了车子的实际用途等内容。

那么什么是对象?

那么这里具体的车辆,就是根据车辆设计图纸设计出来的内容,根据车辆设计图纸可以设计出来很多的车辆,其中,我们可以将车辆设计图纸看做Java类,而具体设计出来的车辆就是Java类的对象。

小结:什么是类,什么是对象?

  • 类是一个抽象概念,包含了属性和行为。例如:设计图纸
  • 对象是类的具体体现,具体的事物。例如:具体实实在在的车辆

第二章 类与对象

1、类的定义

格式

权限修饰符 class 类名称{//成员变量  属性特征//成员方法  行为功能
}

实例

public class Car{//成员变量:品牌String brand;//成员变量:价格int price;//成员方法:跑public void run(){System.out.println("车辆跑...");}
}

2、类的使用

格式

1. 创建对象:  类名称  对象名称 = new 类名称();2. 调用成员:  对象名称.成员变量名称;      对象名称.成员方法名称(参数);

实例

public class Demo{public static void main(String[] args){//创建对象Car c = new Car();//调用成员变量System.out.println(c.brand);System.out.println(c.price);//调用成员方法c.run();}
}

3、类的练习

需求:定义一个学生类,包含有成员变量(姓名、年龄)包含有成员方法(学习)创建对象,调用成员。

代码:

学生类

//学生类
public class Student {//成员变量String name;int age;//成员方法public void study() {System.out.println("搞学习");}
}

测试类(创建一个对象)

public class Demo {public static void main(String[] args) {//创建对象Student one = new Student();//展示结果System.out.println(one); System.out.println(one.name); //nullSystem.out.println(one.age);  //0one.study();  //搞学习//赋值one.name = "德邦总管";one.age = 25;//展示结果System.out.println(one);System.out.println(one.name); //德邦总管System.out.println(one.age);  //25one.study();  //搞学习}
}

测试类(多个引用指向相同区域)

public class Test {public static void main(String[] args) {      //创建对象Student one = new Student();//赋值one.name = "德邦总管";one.age = 20;//展示结果System.out.println(one); System.out.println(one.name); //德邦总管System.out.println(one.age);  //20one.study();  //搞学习//指向相同区域Student two = one;//赋值two.name = "萨瓦迪卡";two.age = 23;//展示结果System.out.println(two); System.out.println(two.name); //萨瓦迪卡System.out.println(two.age); //23two.study();  //搞学习System.out.println(one);System.out.println(one.name); //萨瓦迪卡System.out.println(one.age);  //23one.study();  //搞学习}
}

4、内存分析

一个对象的内存图
两个引用指向相同区域的内存图

5、两类变量

根据变量所在的代码位置不同,我们有两种类型的变量。他们分别是成员变量和局部变量。

  • 1、成员变量
  • 2、局部变量

代码效果

成员变量

1. 代码位置:类中方法外的变量,例如这里的 color2. 内存位置:堆内存当中3. 默认值:存在默认值4. 生命周期:对象存在,成员变量存在。对象销毁,成员变量销毁。

局部变量

1. 代码位置:方法当中的变量,例如这里的 speed2. 内存位置:栈内存当中3. 默认值:没有默认值4. 生命周期:方法存在,局部变量存在。方法销毁,局部变量销毁。

第三章 方法

3.1 方法概述

3.1.1 Java方法引入

我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。

同时,结合前面介绍的Java语言面向对象的设计思想,一个类中会包括有行为,而这个行为就是一个动态的实现,因此,也可以使用方法来实现。

  • 方法:就是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

当需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象,同时还封装了一个类应有的行为特性。

3.1.2 方法定义

语法:

访问权限修饰符 静态修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名...){执行代码...   return 返回语句;
}

说明:

  • 访问权限修饰符: 与之前类定义时使用的权限修饰符类似,指定方法的可用范围。
  • **静态修饰符:**定义了该方法可以被如何访问,其关键字为static(静态的意思)。如果方法前有static关键字,不用创建类对象直接使用类就可以直接访问;如果没有static关键字,必须创建出具体的对象,使用对象才能访问该方法。
  • 返回值类型: 方法执行完成后的返回结果类型。如果方法没有返回值,使用 void关键字即可;如果有返回值,要根据返回值的类型来确定,是什么返回值类型就用什么类型。
  • **方法名:**为我们定义的方法起名,满足标识符的规范,用来调用方法。
  • 参数类型: 定义的方法可能需要传递一个动态的数据,可以用方法参数进行接收。其中,参数类型表示限定了当前方法允许接收的参数类型。
  • **参数名:**与参数类型是一一对应的,用来接收调用方法时传递的参数值。参数类型与参数名统称为参数列表,多个参数列表直接可以用逗号“,”分隔。
  • **执行代码:**就是一个方法里面具体干的事。
  • **return:**方法中的执行代码执行后要返回的结果。如果有返回值,就用“return 返回的结果”来表示;如果没有要返回的结果,可以直接用一个return关键字即可,甚至可以省略。

示例:

public class MethodTest {//1、普通无参、无返回值方法public void print() {System.out.println("这是一个普通的无参、无返回值方法");return;  // 无返回值方法,return关键字可以省略}// 2、普通有参、无返回值方法public void printSum(int a,int b) {int sum=a+b;System.out.println(a+"与"+"b的和为:"+sum);}// 3、普通有参数、有返回值的方法public int getMax(int a,int b) {int max=a>b ? a : b;return max;}// 4、静态有参数、有返回值的方法public int getAbs(int a) {if(a<0) {return -a;}else {return a;}}
}

3.1.3 方法练习

1、定义一个无参无返回值的方法

  • 需求:定义一个普通方法,方法中打印“hello world”语句。
  • 实现
public class MethodTest2 {public void print() {System.out.println("hello world");}
}

2、定义一个静态有参有返回值的方法

  • 需求定义一个静态方法,接收两个int类型参数,通过该方法实现求a的n次方,并返回结果(这里只计算a和n为正整数即可)。
  • 实现
 // 2、静态有参有返回值方法public static int pow(int a,int n) {int result=1;for (int i = 0; i < n; i++) {result*=a;}return result;}

3.1.4 定义方法的注意事项

  • 方法不能嵌套定义

方法只能定义在类中,不支持在方法中再嵌套定义方法。

public class MethodDemo {public static void main(String[] args) {}public static void methodOne() {public static void methodTwo() {// 这里会引发编译错误!!!}}
}
  • 返回值类型,必须要和return语句返回的类型相同或者比返回值类型范围小,否则编译失败 。
// 返回值类型要求是int
public static int getSum() {return 5;// 正确,int类型return 1.2;// 错误,类型不匹配return true;// 错误,类型不匹配
}
  • 不能在return 后面写代码,return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
public static int getSum(int a,int b) {return a + b;System.out.println("Hello World");// 错误,return已经结束,这里不会执行,无效代码
}
  • void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
public class MethodDemo {public static void main(String[] args) {}public static void methodTwo() {return;     // 也可以省略return,后续不能编写其他代码}
}

3.2 main()方法详解

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。

main方法的定义格式通常固定如下:

public class Demo {public static void main(String[] args) {System.out.println("Hello Word");}
}

图解:

说明:

  • 为什么是公共的(public)

    Java设计了几个访问修饰符,包括:private、default 、protected、public。 在Java中声明为public的任何方法或变量都可以从该类的外部访问。 而JVM访问main方法显然不是在类的内部访问,因此main方法需要定义为public的方法。

  • 为什么是静态的(static)

    静态可以让JVM调用main方法的时候更加方便,不需要通过对象调用。关于static关键字我们知道的是,static关键字修饰的方法,可以不用通过创建一个实例去访问,而是可以通过类名直接访问。并且static修饰的方法以及变量存储在虚拟机当中的方法区当中,而非堆内存当中。那么,对于虚拟机来说也是一样的道理。main方法定义为static的,则对于虚拟机来说,在程序启动之后并不需要创建一个实例,就可以去调用这个main方法。

  • 为什么没有返回值(void)

    void表示main方法没有返回值,没有返回值的原因是因为Java不需要main方法向操作系统返回退出信息。如果main方法正常退出,那么Java应用层序的退出代码为0,表示成功的运行了程序。

  • main

    main的名称不能变是为了JVM能够识别程序运行的起点,main方法可以被重载,重载的main方法不会被执行。main方法作为程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程,非守护线程和守护线程,main方法属于非守护线程,守护线程通常由JVM自己使用,Java程序也可以表明自己的线程是守护线程。当程序中所有的非守护线程终止时,JVM退出。也可以用Runtime类或者System.exit()来退出。

  • String [] args

    String[] args,是main方法中唯一可以改变的地方!args是arguments的缩写,只是一个变量默认名,习惯性写作它,但是也可以改变的,只要符合命名规则随便你写成什么。在使用集成开发工具的今天,String[] args更像是一种摆设了,很多初学者都不知道它的作用,其实它是程序运行传入的一个参数组。

3.3 注意事项

方法定义的注意事项,列举代码说明问题

1. 方法不能嵌套定义
2. 方法定义的返回值类型 >= return 后面的返回值类型
3. return 语句的后面,不能写代码
4. void 表示没有返回值,可以省略return不写,或者直接写 return;

第四章 方法重载

1、理论说明

什么是方法重载?

方法重载指的是在同一个类当中,出现了相同名称的方法,方法的参数列表不相同的情况。

参数列表不同指的有哪些不同呢?

  • 1、个数不相同
  • 2、类型不相同
  • 3、多类型顺序不相同

方法重载有什么好处?

可以减少方法的命名次数

2、案例代码

需求:计算多个数据的和

代码:

public class Demo {public static void main(String[] args) {//求和操作int sum1 = getSum(10,20);System.out.println(sum1);//求和操作int sum2 = getSum(10,20,30);System.out.println(sum2);//求和操作int sum3 = getSum(10,20,30,40);System.out.println(sum3);}public static int getSum(int a, int b) {return a + b;}public static int getSum(int a, int b, int c) {return a + b + c;}public static int getSum(int a, int b, int c, int d) {return a + b + c + d;}
}

3、判断重载

下面方法当中,哪些方法构成了重载

1. public static void method(){}
2. public static void method(int a){}
3. static void method(int a,int b){}
4. public static void method(double a,int b){}
5. public static void method(int a,double b){}
6. public void method(int i,double d){}
7. public void method(){}
8. public static void method(int i,int j){}

总结:

用本博主的一句话来描述面向对象与面向过程:
“面向对象:白嫖!!!”
“面向过程:亲力亲为!!!”

JavaSE基础复习_day07相关推荐

  1. javase基础复习攻略《三》

    编程语言的发展: 机器语言--直接由计算机的指令组成,指令.地址.数据都是以"0"和"1"的符号串组成,可以被计算机直接执行. 汇编语言--用容易理解和记忆的符 ...

  2. JavaSE基础复习总结

    文章目录 面向对象的三大特征 封装 继承 多态 多态的实现原理 静态绑定 动态绑定 final关键字 修饰属性: 修饰方法: 修饰类: Static关键字 Static和非Static的区别 变量 方 ...

  3. JavaSE基础复习day01

    学习目标 * 能够说出JDK,JRE,JVM各自的作用和关系 * 能够完成HelloWorld案例的编写及运行 * 能够使用注释对程序进行说明 * 能够知道标识符.关键字的特点 * 能够知道常量的分类 ...

  4. javase基础复习攻略《七》

    容器是什么?通俗的讲容器指可以装其它东西的器皿,前面我们提到的数组便是容器的一种,容器的概念在JAVA中便可以理解为用来存储其它对象的器皿.本篇就让我们一起来认识一下JAVA为我们提供的容器类. 1. ...

  5. javase基础复习攻略《六》

    学习JAVA的同学都知道,sun为我们封装了很多常用类,本篇就为大家总结一下我们经常使用的类.上一篇博客一位朋友留言问我String是不是引用数据类型?我通过查找资料发现String属于应用数据类型, ...

  6. javaSE基础复习之面向对象(4)

    课程笔记Day09 封装 权限修饰符 继承 final 关键字 第一章 封装 第01节 基础理论 面向对象三大特性 1. 封装性 2. 继承性 3. 多态性 什么是封装呢? 类的封装 封装就是对 一些 ...

  7. 2020604 Java基础复习

    2020/6/4 Java基础复习 Java特性和优势 1.简单性: Java是在C++的语法的基础再"减减".没有头文件,没有指针,也不用分配内存,所以相对来说比较简单; 2.面 ...

  8. 江苏省专转本计算机教程,江苏省专转本计算机基础复习(含真题)教程.doc

    江苏省专转本计算机基础 复习要点与历年真题2005年-2014年 2014.10 第一部分 复习要点 第一讲 信息技术---3 第二讲 计算机硬件------8 第三讲 计算机软件---------- ...

  9. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

最新文章

  1. JSTL fmt:formatNumber 数字、货币格式化
  2. java 追加写入hdfs_java操作之HDFS-创建-删除目录-读写文件-追加写文件
  3. 双模sa_2020年5G终端发展展望:NSA/SA双模终端将成市场“主力军”!
  4. 线性表实现一元多项式的表示及相加(C语言实现)【线性表】
  5. 设置Windows XP自动登录的两种方法
  6. 如何构建企业出海的“免疫力“?深入解读阿里云CDN安全能力
  7. WCF中绑定的简单介绍
  8. 不一样的思路,hosts文件在Mysql主从中的应用
  9. (07)System Verilog 类与结构体区别
  10. cms 移动根节点到根节点中的子节点,根节点消失解决办法
  11. 一个中产阶级丈夫给坚持买房妻子的一封信
  12. 每天花30分钟看OGRE--(13)Ogre的渲染流程,在渲染时材质是如何起作用的,材质加载和解析...
  13. C++求解汉字字符串的最长公共子序列 动态规划
  14. Robocode:下载安装及迁移至IntelliJ
  15. windows server 2012 安装 VC2015 安装失败0x80240017解决方法
  16. 读书笔记 | 财务会计理论(第7版 William R.Scott)(上)
  17. PC设置切换Fn功能键
  18. 在燃烧的远征寻找冰封王座:电竞之春下的游戏直播
  19. 【CF1056D】Decorate Apple Tree
  20. autocad application 版本

热门文章

  1. 点积、叉积及其几何意义
  2. 记淘宝客、多多客api开发系列。一、淘宝联盟淘宝客api对接
  3. 金融:一级市场和二级市场的区别
  4. Linux TC-prio 流量分类实例
  5. windows server2012安装telnet
  6. C51汇编语言寻址方式,单片机学习:51单片机寻址方式详解
  7. 性能测试实战(三):性能测试环境部署
  8. linux(二)—cut,tee,paste,tr工具的用法和案例
  9. 美术理科生能报计算机专业吗,理科生可以报哪些艺术类专业
  10. 学习java的第14天之 java 常用类