Java基础重点概要(部分)

news/2024/5/10 22:09:06

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

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 Stringimplements 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://wed.xjx100/news/301240.html

相关文章

华为OD机试真题 JavaScript 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

一、题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏。 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格&#xff0c;然后获得一次选房子的机会&#xff0c;直到所有房子都被选完&#xff0c;房子最多的人获胜。 跳房子的过程中&…

使用Unity开发一个独立的区块链

Arouse Blockchain [Unity独立区块链] ❗️千万别被误导&#xff0c;上图内容虽然都在项目中可寻&#xff0c;但与目前区块链的业务代码关联不大&#xff0c;仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的…

表级锁和行级锁

介绍 为什么有事务隔离性&#xff1f;因为要并发执行&#xff0c;数据安全性和一致性和并发效率问题 串行化&#xff1a;锁实现&#xff0c;没有并发性 用的多的是可重复读&#xff08;mysql&#xff09;和已提交读&#xff08;oracle&#xff09;&#xff0c;因为权衡了数据…

5、共享模型之内存

目录 5.1 Java的内存模型5.2 可见性1、退不出的循环2、解决办法&#xff1a;3、可见性 vs 原子性 5.3 有序性1、为什么会有指令重排2、如何禁止指令重排3、原理之volatile4、happens-before 5.1 Java的内存模型 JMM 即 Java Memory Model&#xff08;Java内存模型&#xff09;…

控制并发流程,做好线程间的协调

一、概述 1. 什么是控制并发流程&#xff1f; 线程一般是由线程调度器自动控制的&#xff0c;但有些场景需要按照我们程序员的意愿去实现多线程之间相互配合&#xff0c;从而满足业务逻辑。比如&#xff1a; 让线程A等待线程B执行完后再执行等一些相互合作的逻辑&#xff1b…

MP : Human Motion 人体运动的MLP方法

Back to MLP: A Simple Baseline for Human Motion Prediction conda install -c conda-forge easydict 简介 papercodehttps://arxiv.org/abs/2207.01567v2https://github.com/dulucas/siMLPe Back to MLP是一个仅使用MLP的新baseline,效果SOTA。本文解决了人类运动预测的问…

通过构造方法使属性初始化

1 问题 如何使属性初始化。 2 方法 在Student类中定义两个构造方法publicStudent(String name)和public Student(String name,int score)。在使用new运算符创建对象&#xff0c;由于实际参数是一个String类型的数据"林冲"&#xff0c;因此在实例化时会调用有一个Stri…

使用CloudOS帮助企业落地云原生PaaS平台

PaaS究竟是什么&#xff1f; IaaS、SaaS的定义很清楚&#xff0c;而PaaS的定义就比较宽泛。所以&#xff0c;很多人把PaaS当做一个万能的“框”&#xff0c;什么都往里装&#xff0c;特别像一排垃圾桶中的那个“其他垃圾”桶&#xff0c;当你拎了一袋垃圾&#xff0c;不知道往…