23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)

本文详述了Java基础知识,包括继承、封装、多态和泛型的概念及其在大数据处理中的应用。讨论了初始化过程、集合、字符串处理、日期处理、JSON解析、正则表达式和异常处理等方面,强调了它们在数据分析工作中的重要性。同时,提到了JDBC在数据交互中的作用,适合Java初学者和大数据开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下:

图片

采用这种向上抽象方式,是为了将多个类的通用属性和方法提取出来,放在它们的父类中,避免同样的代码写多份(即为了实现复用),在子类中只需要定义自己独有的属性和方法,以继承的方式在父类中获取通用属性和方法即可。

//继承代码结构public class Chinese extends Teacher{` `//定义自己独有的属性:工作内容` `Stringcontent;` ` //定义自己独有的方法` `publicvoid writeModels(String name, string content) {` `System.out.println(name + "老师主要工作内容是"+ content);` `}}

特别说明:继承只能是单继承,即一个子类只能继承一个父类。

2.封装

封装的目的在于保护信息。

Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的所有信息,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望发生的事情。

封装主要优点如下:

图片

那么,怎么理解封装实现了复用和扩展呢?

读者可以理解为所谓封装其实只是将属性和功能封装成类,并对类里的成员定义了不同的访问权限,最终还是通过与继承机制的结合实现的代码复用和扩展。

3.多态

所谓多态,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用的到底是哪个类中实现的方法,必须在由程序运行期间才能决定。即不修改程序代码就可以让程序有多个运行状态可以选择,这就是多态性。

上文是根据为啥这个特性叫做多态性的角度给大家解释了一下,如果从实际运用中最终看到的实际效果这个方面来总结,可以理解为,多态是同一个行为具有多个不同表现形式或形态的能力。

举个形象的例子:

现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果,可见,多态实现了很好的扩展性。

4.泛型

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

public class GenericTest{` `// 泛型方法 printArray publicstatic < E > void printArray( E[] inputArray ) { // 输出数组元素 for( E element : inputArray ){ System.out.printf( "%s ", element ); } System.out.println(); } publicstatic void main( String args[] ) { // 创建不同类型数组: Integer, Double 和 Character Integer[] intArray = { 1, 2, 3, 4, 5 };       Double[]doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { ‘H’, ‘E’, ‘L’, ‘L’, ‘O’ }; System.out.println( “整型数组元素为:” ); printArray( intArray ); // 传递一个整型数组 System.out.println( “\n双精度型数组元素为:” );       printArray(doubleArray ); // 传递一个双精度型数组 System.out.println( “\n字符型数组元素为:” ); printArray( charArray ); // 传递一个字符型数组 } }

结果如下:

整型数组元素为:``1 2 3 4 5 ``双精度型数组元素为:``1.1 2.2 3.3 4.4 ``字符型数组元素为:``H E L L O

同一个方法,允许传入不同的参数类型,得到不同的运行结果,以此实现了代码的复用和扩展。

2、初始化过程

虽然本文讲解的绝大部分内容偏向应用,但对于初始化过程这种看上去有点涉及到底层原理的内容,考虑再三,还是要稍微提及一下,那是因为在实际工作中,经常发生因为对整个初始化过程的机制不了解而写出不合理代码,从而产生bug的现象。

本段会针对类的各成员的初始化顺序重点强调一下,这也是犯错最多且唯一我们能控制的地方,希望大家务必对此要有所了解。

话不多说,上实例:​​​​​​​

class Father{` `static{` `System.out.println("父类静态代码块初始化" );` `}` `{` `System.out.println("父类代码块初始化" );` `}` `private static void s=print();` `public static void print()` `{` `System.out.println("父类静态方法" );` `}` `public Father()` `{` `System.out.println("父类无参构造函数初始化完成" );` `show();` `}` `public void show()` `{` `System.out.println("父类show()方法" );` `}}class Son extends Father{ static{ System.out.println(“子类静态代码块初始化” ); } { System.out.println(“子类代码块初始化” ); } private static int i=1; private String s=“子类私有成员变量” ; public void show() { System.out.println(“子类show()方法:i=” +i); } public Son() { System.out.println(“子类构造函数初始化完成” ); System.out.println(“子类成员变量初始化完成:s=”+s); show(); }}public class TestClassLoadSeq { public static void main(String[]args) { new Son(); }``}

执行顺序:

父类静态代码块初始化

父类静态方法

子类静态代码块初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值