Java基础重点概要(部分)

news2024/7/2 10:11:37

为工信部第六届全国计算机信息大赛准备 ,主要复习以下内容。

Java基础及环境:JDK发展历史,不同版本的进阶内容。Java程序的编写、编译、调试。
Java程序设计基础:常量和变量的概念,声明方式和作用域。基本数据类型的定义和概念。Java基本数据类型的转换。
Java字符串处理:String、StringBuffer和StringBuilder的基本概念和使用。正则表达式的讲解和使用。
Java数字和日期处理:数学相关类、随机数生成相关类、数字格式化以及各种类型数字的运算和转换。Java日期和时间的处理。
Java数组和基本排序算法:一维数组、二维数组和多维数组的基本概念及应用。
Java类和对象。Java类的封装、继承和多态。Java异常处理。Java集合、泛型和枚举。Java反射机制。Java输入输出流和文件操作。Java多线程编程。Java网络编程。Java图形用户界面。
Java数据库编程:JDBC的基本API。


1. JDK发展历史

1995年5月23 java(原名Oak)诞生,并且在SunWorld大会上正式发表了java1.0版本。

1996年1月23 JDK1.0发布Java语言有了第一个正式版本的运行环境。JDK1.0提供了一个纯解释执行的Java虚拟机的实现(Sun class VM)。JDK1.0的代表技术:JVM,Applet,AWT.

1997年2月19日,JDK1.1,新特性:JAR文件格式、JDBC、JavaBean、RMI、内部类(Inner class)、反射(Reflection)

1998年12月4日,JDK1.2,新特性:基础体系拆分:J2SE(面向桌面应用程序开发)、J2EE(面向企业级应用开发程序开发)、J2ME(面向手机等移动终端开发),技术:EJB、Java Plug-in、JavaIDL 、Swing、JIT(Just In Time)编译器.

2000年5月8日JDK1.3:使用CORBA IIOP实现RMI的通信协议,改进Java2D,添加JavaSound类库。

2002年2月13日JDK1.4 ,新特性:正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器。

2004年9月30日,JDK1.5,新特性:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环。

2006年12月11日,JDK1.6,新特性:提供动态语言支持、提供编译API和卫星HTTP服务器API,改进JVM的锁,同步垃圾回收,类加载。

2009年2月19日JDK1.7,新特性:提供GI收集器、加强对非Java语言的调用支持(JSR-292,升级类加载架构。

2014 年 3 月 18 日 JDK1.8新特性:Lambda 表达式、方法引用、默认方法、新工具、Stream API、Date Time API 、Optional 类、Nashorn, JavaScript 引擎。

2017年9月21日jdk9.0,新特性:模块系统、HTTP 2 客户端、多版本兼容 JAR 包、私有接口方法、改进的 Stream API、响应式流(Reactive Streams) API:

2018年3月21日jdk10,新特性:var 局部变量类型推断、统一的垃圾回收接口

2018年9月25日jdk11,新特性:HTTP客户端(标准)、无操作垃圾收集器。首个LTS版本

2019年3月19日jdk12:新增一个名为 Shenandoah 的垃圾回收器、扩展switch语句的功能、改进 G1 垃圾回收器


2. Java程序设计基础

2.1 变量和常量的概念

通常来说,在程序运行中,可以被赋值改变的一般被称为变量,在被final修饰后,会变成一个常量,在运行过程中不能发生任何的值改变。

2.2 Java变量的声明

在 Java 程序设计中,每个声明的变量都必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。声明变量的同时可以为变量赋值,也可以声明以后再赋值。在程序运行过程中,空间内的值是变化的,这个内存空间就称为变量。为了操作方便,给这个空间取了个名字,称为变量名,内存空间内的值就是变量值。所以,申请了内存空间,变量不一定有值,要想变量有值,就必须要放入值。也就是一个初始化行为。包装对象都有默认的初始化值。

2.3 Java变量的作用域

一般的来说 ,就我自身理解分为两大块,一块是成员变量,一块是局部变量。成员变量比较好理解,是类的一部分,也就是定义在类中,方法外。可供全类使用。局部变量一般定义在方法体内,举例说明。

public class Illustrate {
	// 成员变量,整个类中都可以使用
	private String username;
	// 成员变量,整个类中都可以使用
	private Integer age;
	// 成员变量,整个类中都可以使用
	private Date birthday;
	

	public void add() {
		// 定义一个局部变量,在方法体内
		int num = 10;
		num += 1;
		if (true) {
			// 定义局部变量
			int a = 5;
		}
		// 变量a是无法在if方法体外访问到的,超出了他的作用于范围。只作用于当前方法体内
		// 但是可以访问到num和成员变量
		username = "张三";
		age = 20;
	}
}

2.4 数据类型的定义和概念

在Java中,分为两大类,一种为引用数据类型,一种为基础数据类型。
在这里插入图片描述

  1. byte

byte 数据类型是8位、有符号的,以二进制补码表示的整数,最小值是 -128(-2^7)、最大值是 127(2^7-1),默认值是 0;byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;

例子:byte a = 100,byte b = -50;

 2. short

short 数据类型是 16 位、有符号的以二进制补码表示的整数最小值是 -32768(-2^15)、最大值是 32767(2^15 - 1);Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是 0;

例子:short s = 1000,short r = -20000;

 3. int
  
int 数据类型是32位、有符号的以二进制补码表示的整数,最小值是 -2,147,483,648(-2^31)、最大值是 2,147,483,647(2^31 - 1),一般地整型变量默认为 int 类型;默认值是 0 ;

例子:int a = 100000, int b = -200000;

 4. long

long 数据类型是 64 位、有符号的以二进制补码表示的整数,最小值是 -9,223,372,036,854,775,808(-2^63)、最大值是 9,223,372,036,854,775,807(2^63 -1);这种类型主要使用在需要比较大整数的系统上;默认值是 0L;

例子: long a = 100000L,Long b = -200000L;

【L】理论上不分大小写,但是若写成【l】容易与数字【1】混淆,不容易分辩。所以最好大写;

 5. float

float 数据类型是单精度、32位、符合IEEE 754标准的浮点数,float 在储存大型浮点数组的时候可节省内存空间,默认值是 0.0f;浮点数不能用来表示精确的值,如货币;

例子:float f1 = 234.5f;

 6. double

double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数,浮点数的默认类型为double类型;double类型同样不能表示精确的值,如货币,默认值是 0.0d;

例子:double d1 = 123.4;

 7. boolean

boolean数据类型表示一位的信息,只有两个取值:true 和 false,这种类型只作为一种标志来记录 true/false 情况;默认值是 false;

例子:boolean one = true;

 8. char

char类型是一个单一的 16 位 Unicode 字符,最小值是 \u0000(即为0)、最大值是 \uffff(即为65,535),char 数据类型可以储存任何字符;

例子:char letter = ‘A’;

2.5 Java基本数据类型的转换

Java要求=等号左边和=等号右边的类型要一致,如果不一致,就需要进行数据类型转换。Java中不同的类型之间,在满足数据兼容的条件下可以实现转换。Java的数据类型转换,大致有如下几种转换方案:

  1. 自动类型转换:容量小的类型自动转换为容量大的数据类型;

  2. 强制类型转换:容量大的数据类型转换为容量小的数据类型;

  3. 隐含强制类型转换(初始化):在变量初始化时,int类型会隐含强制转换成低级别的byte和short类型;

  4. 其他类型转换:包装类、字符串、基本类型直接的转换。

对基本类型来说,常见的数据转换方式包括自动类型和强制类型转换;对引用类型而言,只存在强制类型转换一种形式。

我们在进行类型转换时,无论自动和强制类型转换,都要遵循如下基本原则:

  1. 不能对boolean类型进行类型转换;

  2. 不能把对象类型转换成不相关的类对象;

  3. 把容量大的类型转换为容量小的类型时,必须使用强制类型转换;

  4. 类型转换过程中,可能会导致溢出或损失精度;

  5. 浮点数到整数的转换,是通过舍弃小数得到的,而不是四舍五入。


3. Java字符串

3.1 String类

String是一种引用数据类型,我们会用它来存储字符串,什么是字符串呢,和他的名字一样,就是一个个字符拼在一起,串成一串。如下代码

String str = "Hello World";

String的底层,其实就是一个个字符拼在一起,那么也就是说,底层是一个char数组。我们上面看到的Hello World实际上存储的时候是以这样的方式存储的。那一个个的char是怎么存储的,也就是通过字符集,ASCII码表,来进行存储的。

char[] str = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};

如何验证他是正确的结论,在String类中,看源码。我们会看到这样的一行代码,说明了确实是由一个char数组来进行存储数据的。且说明不可变。(final)

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
		 private final char value[];
}

且类上被final修饰过,说明类是没有办法被继承的。

3.1.1 String构造器

在String中,存在了不少的构造器,分别列出以下构造器,且做说明描述。

  1. public String(): 空构造器。
  2. public String(String original):把字符串常量值转换为字符串对象。
  3. public String(char value[]):把字符数组转为字符串对象。
  4. public String(char value[], int offset, int count): 把字符数组的一部分转为字符串对象。
  5. public String(byte ascii[], int hibyte, int offset, int count):把字节数组的一部分转换为字符串对象。
  6. public String(byte ascii[]): 把字节数组转换为字符串对象。

以代码的形式实现分别如下:

package oop;
public class ObjectContext {

    public static void main(String[] args) {

        // public String(String original):把字符串常量值转换为字符串对象。
        String str1 = new String("Hello World");

        // public String(char value[]):把字符数组转为字符串对象。
        String str2 = new String(new char[] {'A', 'B', 'C'});

        // public String(char value[], int offset, int count): 把字符数组的一部分转为字符串对象。
        String str3 = new String(new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G'}, 0, 3);

        // public String(byte ascii[], int hibyte, int offset, int count):把字节数组的一部分转换为字符串对象。
        String str4 = new String(new byte[] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 3);

        // public String(byte ascii[]): 把字节数组转换为字符串对象。
        String str5 = new String(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});

        System.out.println("把字符串常量值转换为字符串对象: " + str1);
        System.out.println("把字符数组转为字符串对象: " + str2);
        System.out.println("把字符数组的一部分转为字符串对象: " + str3);
        System.out.println("把字节数组的一部分转换为字符串对象:" + str4);
        System.out.println("把字节数组转换为字符串对象: " + str5);

    /*
    把字符串常量值转换为字符串对象: Hello World
    把字符数组转为字符串对象: ABC
    把字符数组的一部分转为字符串对象: ABC
    把字节数组的一部分转换为字符串对象: 
    把字节数组转换为字符串对象:  	
     */
    
    }

}

3.1.2 String常用的判断方法

  1. boolean equals(Object obj):比较字符串的内容是否相同,区分大小写。
  2. boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写。
  3. boolean contains(String str):在一个字符串中是否包含另外一个字符串。
  4. boolean startsWith(String str):判断字符串是否以某个指定的字符串开头。
  5. boolean endsWith(String str):判断字符串是否以某个指定的字符结尾。
  6. boolean isEmpty():判断字符串是否为空。

以下是这些API代码实现的实际使用方式:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java学校运动会管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

C语言之指针详解(4)

目录 本章重点 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 函数指针 数组指针—指向数组的指针 函数指针—指向函数的指针 函数指针 我们来看代码 #…

基于人工智能,现代数据基础架构的新兴架构

作者 Matt Bornstein、Jennifer Li和Martin Casado 摘要 现代机器学习基础设施2.0新架构&#xff1a; http://bit.ly/3AVBpV6 这个图概括了机器学习基础设施2.0的主要组成部分。它涵盖了从数据转换到模型集成的全过程。每个阶段的具体工具和技术也在括号中列出。 结构解读 …

stub实验和配置命令

拓扑 需求 将区域12设置为Stub区域&#xff0c;使区域12的路由设备不受外部链路影响(不接收4/5类LSA&#xff09;降低区域12&#xff08;末梢区域&#xff09;设备压力&#xff0c;还能让区域12的PC1与外部PC3通信 配置步骤 1&#xff09;配置接口信息 - 配置PC的IP地址 - 配置…

SpringBoot的基础配置 - yaml文件的格式以及数据读取

文章目录 SpringBoot基础配置配置文件格式yaml文件格式yaml数据读取 SpringBoot基础配置 配置文件格式 我们用修改服务器端口号来举例, 演示配置的格式 目前我们SpringBoot入门程序已经可以启动, 但是端口是使用的默认的8080 http://localhost:8080/books/1修改服务器的端口号…

CleanMyMacX4.13.4中文免费版mac电脑管家

CleanMyMac X这款软件集成清理、mac保护、速度优化维护、应用程序管理和文件管理5大功能&#xff0c;使用过程安全高效&#xff0c;用户不必担心误操作导致系统的崩溃。作为一款专业的mac电脑系统管家&#xff0c;CleanMymac X一直致力于更加智能、便捷地全方位维护我们的电脑&…

基于servlet+jsp+mysql人事工资管理系统(含实训报告)

基于servletjspmysql人事工资管理系统 一、系统介绍二、功能展示1.用户登陆2.查看个人信息3.查看个人工资、查看考勤4.查看自己所在部门5.人员信息管理6.考勤管理&#xff08;管理员&#xff09;7.工资管理&#xff08;管理员&#xff09;8.部门管理&#xff08;管理员&#xf…

批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)

云端炼丹固然是极好的&#xff0c;但不能否认的是&#xff0c;成本要比本地高得多&#xff0c;同时考虑到深度学习的训练相对于推理来说成本也更高&#xff0c;这主要是因为它需要大量的数据、计算资源和时间等资源&#xff0c;并且对超参数的调整也要求较高&#xff0c;更适合…

大数据处理架构Hadoop

大数据处理架构 Hadoop 概述Hadoop简介Hadoop的特性 Hadoop项目架构Hadoop的安装和使用Hadoop的安装方式Hadoop的安装配置&#xff08;单机/伪分布式&#xff09;SSH登录权限设置单机安装配置伪分布式安装配置 Hadoop集群的部署与使用Hadoop集群中有哪些节点类型集群规模要多大…

Python高级系列教程:HTTP协议与静态Web服务器开发

学习目标 1、了解HTTP协议的基本概念 2、掌握HTTP请求报文与响应报文 3、学会使用开发者工具查看HTTP协议的通信过程 4、搭建Python自带的静态Web服务器 5、掌握Python静态Web服务器开发 一、HTTP协议概述 1、网址URL 网址又称为URL&#xff0c;URL的英文全拼是(Uniform …

Vue中如何进行表格合并与拆分

Vue中如何进行表格合并与拆分 在Vue应用程序中&#xff0c;表格是一个非常常见的组件。有时候我们需要对表格进行合并或拆分来满足特定的需求。在本文中&#xff0c;我们将介绍如何在Vue中进行表格的合并和拆分。 如何进行表格合并&#xff1f; 表格合并是指将多行或多列的单…

如何使用ArcGIS制作SketchUp格式三维建筑

GIS数据也可以和传统的三维建模软件进行结合&#xff0c;在很长一段时间内&#xff0c;一直有客户问如何将水经微图中下载的建筑数据转换为SketchUp模型&#xff0c;这里给大家找到了一种解决方案&#xff0c;可以通过插件进行转换&#xff0c;希望能够对你有所帮助。 加载插件…

恶劣天气条件下激光雷达感知研究综述

摘要 自动驾驶汽车依靠各种传感器来收集周围环境的信息。车辆的行为是根据环境感知进行规划的&#xff0c;因此出于安全考虑&#xff0c;其可靠性至关重要。有源激光雷达传感器能够创建场景的精确3D表示&#xff0c;使其成为自动驾驶汽车环境感知的宝贵补充。由于光散射和遮挡&…

C++11学习笔记(3)——通用工具(上)(包含重要特性智能指针Smart pointer)

1.Pair 在C11中&#xff0c;std::pair是一个模板类&#xff0c;用于将两个值组合成一个单元。它可以将两个不同的类型的值配对在一起&#xff0c;并且提供了对这对值的访问和操作。 std::pair的定义 template<class T1, class T2> struct pair{T1 first;T2 second; };…

ElasticSearch完整入门及springboot集成

目录 ElasticSearch概述ElasticSearch版本特性Elasticsearch 5Elasticsearch 6.0Elasticsearch 7.0Elasticsearch 8.0 ElasticSearch安装Windowslinux Kibana安装Windowslinux使用 IK分词器(elasticsearch插件)安装自定义的词典 ES的基本使用字段数据类型索引操作文档操作创建文…

什么是oa系统,什么是工单系统,有啥区别?

什么是oa系统&#xff0c;什么是工单系统&#xff0c;有啥区别&#xff1f; 一、OA系统与工单系统介绍 1、什么是OA系统 OA系统全称为Office Automation&#xff0c;即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息…

apple pencil有买的必要吗?平板电容笔推荐平价

在当今时代&#xff0c;高科技已经成为推动电子产品发展的重要动力之一。无论是在工作上&#xff0c;还是在学习上&#xff0c;iPad平板的使用都很方便。iPad将会和我们的生活联系在一起&#xff0c;不管是现在还是未来。iPad配上一个简单的电容笔&#xff0c;不仅可以提高工作…

分享11个常用的VSCode快捷键,让你编码更高效

因为频繁切换到鼠标可能会对你的手腕造成不利影响。 说实话&#xff0c;快速编程是我继续编码的原因之一&#xff08;开个玩笑&#xff0c;除非...&#xff09;。无论如何&#xff0c;我发现让我变得更快的关键是与鼠标分离。想一想&#xff0c;每次你需要移动鼠标时&#xff0…

STM32单片机(六)TIM定时器 -> 第四节:TIM输出比较练习(PWM驱动LED呼吸灯、PWM驱动舵机以及PWM驱动直流电机)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

CSS查缺补漏之如何优雅解决margin垂直方向塌陷与合并问题?

一&#xff1a;父子元素之间margin垂直方向塌陷问题 在处理margin垂直方向问题时&#xff0c;经常会遇到在给子元素设置margin时&#xff0c;导致效果出现在了父元素上&#xff1b;如下代码所示&#xff1a; 代码原义是想实现三方面&#xff1a; ① 将box1的margin-top调为5…