Java大数据开发和安全开发
(一)Java的面向对象编程
1.1 什么是面向对象
在 Java 中,面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计的重点放在对象和它们之间的关系上。对象是程序
中用来表示现实世界中的实体或概念的实体,例如人、动物、汽车、账户等。
1.2 面向对象和面向过程的区别
面向对象和面向过程是两种不同的编程范式,它们在编程思路和代码组织方式上有所不同。
- 面向过程编程(Procedure-OrientedProgramming)是一种以过程为中心的编程方式,它将问题分解为一系列步骤或函数,并按照顺序执行这些步骤来解决问题。在面向过程编程中,程序由一系列函数组成,每个函数执行一个特定的任务。
- 相比之下,面向对象编程强调以对象为中心,将问题抽象为对象,并通过对象之间的交互来解决问题。在面向对象编程中,程序由一系列对象组成,每个对象具有自己的属性和行为。
以下是面向对象编程和面向过程编程之间的一些主要区别:
- 编程思路:面向对象编程更注重模拟现实世界中的事物和关系,将问题抽象为对象;而面向过程编程更注重问题的步骤和算法。
- 代码组织:面向对象编程将代码封装在对象内部,通过对象之间的交互来组织代码;而面向过程编程将代码组织为一系列函数。
- 数据封装:面向对象编程将数据和相关的操作封装在一起,对象对其内部数据进行保护;而面向过程编程中,数据通常以全局变量或参数的形式在函数之间传递。
- 代码重用:面向对象编程通过继承和多态性实现代码重用;而面向过程编程中,代码重用通常通过函数的调用和参数传递来实现。
- 可维护性:面向对象编程的代码更容易理解和维护,因为它更贴近现实世界的概念;而面向过程编程的代码可能更容易理解和维护,因为它更关注问题的步骤和算法。
1.3 面向对象开发设计特征
- 开发的过程:其实就是不断的创建对象,使用对象, 指挥对象 ,做事情。
- 设计的过程:其实就是在管理和维护对象之间的关系。
面向对象的特征:
- 封装(encapsulation)
- 继承(inheritance)
- 多态(polymorphism)
面向对象编程的优点
- 提高代码复用性。
- 使用者无需关心具体细节。
- 转变程序员角色,更加符合人的思维习惯。
1.4 面向对象语法
- 创建对象模板,用来供不同的对象调用
- 然后开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理
- 属性: 对应类中的成员变量。
- 行为: 对应类中的成员函数。
类的语法格式:
- 定义类其实在定义类中的成员(成员变量和成员函数)
public class Student { //声明类
String name; //定义成员变量
public void printTotalScore() { //成员方法
System.out.println();
}
}
面向对象案例解释:
- 计算机是用来处理数据的
- java使用变量来存储单个数据,数组存储多个数据
- 在处理波妞的数据时需要先创建波妞对象,再赋值数据给她,这就需要用到OOP
1.4.1 先创建对象模板
创建类模板,直接接受各类对象数据进行处理
public class Student {
String name;
double chinese;
double math;
public void printTotalScore() {
System.out.println(name + "的总成绩是:" + (chinese + math));
}
public void printAverageScore() {
System.out.println(name + "的平均成绩是:" + (chinese + math) / 2.0);
}
}
1.4.2 实例化对象
实例化对象向模板传递不同的对象数据,让模板来处理,然后返回我们要的结果
public class Test {
public static void main(String[] args) {
// 目标: 面向对象编程快速入门。// 1、创建一个学生对象,封装播妞的数据
Student s1 = new Student();
s1.name = "播妞";
s1.chinese = 100;
s1.math = 100;
s1.printTotalScore();s1.printAverageScore();
// 2、再创建一个学生对象,封装播仔的数据
Student s2 = new Student();s2.name ="播仔";
s2.chinese = 59;
s2.math = 100;
s2.printTotalScore();
s2.printAverageScore();
}
}
- 这种编程套路是怎么出来的?有什么好处呢?
- 汽车的数据 找汽车对象处理
- 手机的数据 找手机对象处理
- 学生的数据 找学生对象处理
- 符合人类思维习惯,编程更简单、更直观
1.4.3 对象又该怎么理解?
- class也就是类,也称为对象的设计图 (或者对象的模板)也就是表的设计者 整个代码就是写了一个表的模板
- public class student 表示设计的表是一个学生表
- string name 表示表的字段内容
- viod printAverageScore 表示怎么处理表的数据 (求和 平均值)
- 对象其实就是一张表
- 对象本质上是一种特殊的数据结构
- 实例化对象其实就是给这个表填上数据,
- 方法就是处理这个成绩 算出这个成绩的平均分 总和
1.4.4 对象在计算机中的执行原理
程序在执行时先将test.class加载进方法区。接着读取Test类和mian方法到方法区,mian方法是要在栈内存中运行的,所以在栈内存中划出main方法的区域,把mian方法传送过去执行,接着读取发现使用到了学生类,就加载学生类到方法区,包括student的变量和方法,然后是创建s1学生变量,我们说过变量是在栈内存中运行的,所以在栈内存中开辟一个Student s1变量的空间,然后发现S1变量的右边是new 了一个studnet的对象,我们说过new是要在堆内存中运行,所以在堆内存中开辟一个student对象的空间,把对象的变量存储在里面,同时这个空间也会生成对象地址和一个类的地址,类地址指明当前对象是由那一个对象创建出来的,所以类对象会指向student.class 类,而S1存储就是对象的地址,所以当调用类方法时首先会按照s1指向的对象地址找到是哪个对象,然后再有对象地址找到类地址,由类地址指明是对象是哪个类创建的,在这个类中找到要执行的方法,产生结果
1.5 类和对象的一些注意事项
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如: Student、Car…
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
- 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名.
- 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
- 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象
package com.qianxin.object;
public class Student {
//成员变量
String name; //变量初始值:null 自己设置初始值是没有意义的
double chinese;//变量初始值:0.0
double math;//变量初始值:0.0
//成员方法
public void printTotalScore() {
System.out.println(name + "的总成绩是:" + (chinese + math));
}
public void printAverageScore() {
System.out.println(name + "的平均成绩是:" + (chinese + math) / 2.0);
}
}
class Techer(){ //可以有多个类
}
1.5.1 多个变量指向同一个对象,需要注意什么?
1.5.2 如果某个对象没有任何变量指向它了,需要注意什么?
- 注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾
- Java存在自动垃圾回收机制,会自动清楚掉垃圾对象,程序员不用操心。
1.6 This关键字
- this就是一个变量,可以用在方法中,来拿到当前对象
- 谁调用对象,这个this就是谁
public class StudentTest {
double score;
public void printThis(){
System.out.println(this);
}
public void printPass(double score){
if (this.score > score){
System.out.println("恭喜您,您成功考入了哈佛大学了~~");
} else {
System.out.println("落选了~");
}
}
}
public class ThisTest {
public static void main(String[] args) {
StudentTest s1 = new StudentTest();
s1.printThis();
StudentTest s2 = new StudentTest();
s2.printThis();
StudentTest s3 = new StudentTest();
s3.printPass(250);
}
}
this是怎么获取对象呢
实际上它默认有个参数 (Student this)
1.7 构造器
构造器的定义:
构造器和类同名:
public class GouZaoQi {
// 无参数构造器
public GouZaoQi() {
}
// 有参数构造器
public GouZaoQi(String name, double score) {
}
}
构造器的特点:
- 创建对象时,对象会去调用构造器
- 创建对象时,传递值就调用有参数构造器
- 创建对象时,没有值就调用无参数构造器
public class GouZaoQi {
// 无参数构造器
public GouZaoQi() {
System.out.printn("无参数构造器被触发执行了~");
}
// 有参数构造器
public GouZaoQi(String name, double score) {
System.out.printn("有参数构造器被触发执行了~");
}
}
实例化对象调用
public class GouZaoQiTest {
public static void main(String[] args) {
GouZaoQi gzq= new GouZaoQi(); //无参数 创建对象时,没有值就调用无参数构造器
}
}
无参数构造器被触发执行了~
public class GouZaoQiTest {
public static void main(String[] args) {
GouZaoQi gzq= new GouZaoQi("潘仔",99); //有参数 创建对象时,传递值就调用有参数构造器
}
}
有参数构造器被触发执行了~
创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
public class GouZaoQiTest {
public static void main(String[] args) {
GouZaoQi gzq= new GouZaoQi("小黑",99); //初始化赋值。
System.out.println(s2.name);
System.out.println(s2.score);
}
}
// 有参数构造器
public Student(String name,double score){
System.out.println("有参数构造器被触发执行了~~");
this.name = name;
this.score =score;
}
构造器的注意事项
- 类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的
- 一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了