Java 基础

Posted wuyunrui08

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 基础相关的知识,希望对你有一定的参考价值。

Java 基础(一)

目录

下面我们来了解Java的基础。

Java"白皮书"摘要

  • 简单性
  • 面向对象
  • 分布式
  • 健壮性
  • 安全性
  • 体系结构中立
  • 可移植性
  • 解释型
  • 高性能
  • 多线程
  • 动态性

back

简单的Java程序


public class FirstSample{
	public static void main(String[]args){
   		System.out.println("we will not use \'Hello, World!!!\'"); 
   }
}

这个程序虽然简单,但是所有的Java应用程序,都是这种格式,我们还是花一些时间来了解它

  • 关键字public称为访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别

其中还有:

  • private
  • protected
  • 关键字class后面紧跟着的是类名,在上述的程序中FirstSample称为类名。

Java中,对于类名的命名,必须是以字母为开头,后面可以跟字母和数字的任意组合,长度基本上没有限制,但是不可以使用Java的保留字

  • 源代码的文件名必须与公共类的名字相同,并用.java作为扩展名

back

源代码文件和字节码文件

在Java中,有两种常见的文件,分别是以.java.class为扩展名的文件。其中.java是Java源文件,.class是字节码文件(也就是经过编译后的文件)

我们都常说,Java是跨平台的,为什么能够跨平台?因为有jvm,因为jvm只能识别.class文件,所以编写的.java文件必须经过编译,称为.class文件,才能够被jvm运行

back

Java的数据类型

Java中的基本数据类型是四类八种

哪四类?

  • 整型
  • 浮点类型
  • char类型
  • boolean类型

八种是:

类型 占字节数
byte 1字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节
char ---
boolean ---

boolean只能有两个值,false,true,不可以有其他的值,用于判定逻辑条件。整型值和布尔值之间不能进行相互转换

请注意!!!!

Integerint不是同一个东西,Integerint的包装类,intjava的一种基本数据类型。因为Integer是一个类,所以必须经过实例化之后,才能使用。而int则不需要。其中,Integer的默认值是null,int的默认值是 0

其中还有:

  • Byte
  • Short
  • Long
  • Float
  • Double
  • Boolean
  • Character
  • Integer ( 刚刚提及的 )

以上的都是包装类

而其中,包装类常用的方法则有,以 Integer 为例

返回值类型 方法名 解释
byte byteValue() 把Integer对象转换为byte类型
double doubleValue() 转为double类型
float floatValue() 转为float类型
int intValue() 转为int类型
long longValue() 转为long类型
static int parseInt(String str) 把str从字符串类型转成int类型
String toString() 把转成字符串类型
static Integer valueOf(String s) 将字符串转成Integer类型

包装类主要是两种方法,

  • 一种是本类型和其它类型之间进行转换
  • 另一种是字符串和本类型以及基本类型之间的转换

back

final关键字

在Java中,final关键字可以用来修饰类、方法和变量,变量包括成员变量和局部变量

  • 修饰类:

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

  • 修饰方法:

final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写换句话说,也就是这种方法提供的功能已经满足当前要求,不需要进行扩展,并且也不允许任何从此类继承的类来重写这种方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。

  • 修饰变量

final修饰的变量表示此变量是“最后的、最终的”含义。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

back

数学函数与常量

在Java中,有一个类叫Math,这里包含着各种各样的数学函数,在编写不同类别的程序的时候,可能需要的函数也有不同

方法 作用
Math.sqrt(int a) 对一个数进行开平方
Math.abs(int a) 对一个数进行绝对值运算
Math.pow(doube a,doule b) 对a进行b次幂的运算
Math.PI 数学中pi的值,也就是3.1415926525.....

还有很多,不一一列举

back

位运算符

Java中也有类似于c++的位运算

其中

  • & 进行 "and" 运算,也就是与运算
  • | 进行 "or" 运算,也就是或运算
  • ^ 进行 "xor" 运算,也就是异或运算
  • ~ 进行 "not" 运算,也就是非运算
  • >> 进行右移运算
  • << 进行左移运算

back

String API

Java中的String类包含了50多个的方法,下面列出一些常用的方法

方法 作用
char charAt(int index) 返回index位置的代码单元
int compareTo(String other) 按照字典序,如果字符串位于other之前,返回一个负数,如果位于other之后,返回一个正数,如果两个相等,那么返回 0
boolean empty() 判断是否为空,如果为空,那么返回true,否则返回false
int indexOf(String str)
int indexOf(String str, index formIndex)
int indexOf(int cp)
int indexOf(int cp,int formIndex) 返回与字符串str或码点cp匹配的第一个字符串的开始位置,从索引0或fromIndex开始匹配。如果在原字符串中国不存在str,则返回 -1
int length() 返回字符串代码单元的个数
String substring(int beginIndex)
String substring(int beginIndex, int endIndex) 返回一个新字符串。这个字符串包含原始字符串中从beginIndex到字符串末尾或endIndex-1的所有代码单元
String toLowerCase() 返回一个字符串,将原始字符串中的大写字母改成小写字母
String toUpperCase() 返回一个字符串,将原始字符串中的小写字母改成大写字母

了解String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {

    /**
     * The value is used for character storage.
     *
     * @implNote This field is trusted by the VM, and is a subject to
     * constant folding if String instance is constant. Overwriting this
     * field after construction will cause problems.
     *
     * Additionally, it is marked with {@link Stable} to trust the contents
     * of the array. No other facility in JDK provides this functionality (yet).
     * {@link Stable} is safe here, because value is never null.
     */
    @Stable
    private final byte[] value;

    /**
     * The identifier of the encoding used to encode the bytes in
     * {@code value}. The supported values in this implementation are
     *
     * LATIN1
     * UTF16
     *
     * @implNote This field is trusted by the VM, and is a subject to
     * constant folding if String instance is constant. Overwriting this
     * field after construction will cause problems.
     */
    private final byte coder;

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    /**
     * Cache if the hash has been calculated as actually being zero, enabling
     * us to avoid recalculating this.
     */
    private boolean hashIsZero; // Default to false;

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    @java.io.Serial
    private static final long serialVersionUID = -6849794470754667710L;

		.......
|

以上是String中的一些代码,由上面可见,String是一个final类,也就意味着不能够对其进行继承,并且它的成员方法都默认为final方法。

重要:String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串


引入常量池:

Java中的常量池有两种

  • 静态常量池

  • 运行时常量池

  • 静态常量池

即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。这种常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包含:1、类和接口的全限定名,2、字段名称和描述符,3、方法名称和描述符

  • 运行时常量池

是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。类加载后,常量池中的数据会在运行时常量池中存放!

back

读入和输出

读入

java.util.Scanner

Scanner在java.util包中

Scanner in=new Scanner(System.in)

输出

System.out.print(something)

System.out.print("What is your name?")

使用Scanner类中的各种方法,可以从控制台中进行输入,例如

Scaner in=new Scanner(System.in);
String name=in.nextLine();//读取下一行,也就是你应该输入的那一行,然后赋值给name

int pos=in.nextInt();//读取下一个数字,转化为int赋值给pos
double pos=int nextDouble();//读取下个一个数字,转化为double赋值给pos

System.in是什么?是一个输入流。流不展开

back

Java中允许使用包将类组织在一个集合中。借助包可以更方便组织自己的代码,并将自己的代码与别人提供的代码库分开管理

使用包的主要原因是确保类名的唯一性。如果两个程序员不约而同地建立了两个类名一样的类,只要将这些类放置在不同的保重,就不会产生冲突。

事实上,为了保证报名的绝对唯一性,只要用一个因特网域名的逆序的形式作为报名,然后对与不同的工程使用不同的子包。

类的导入,以导入Scanner类为例的两种形式

  • import java.util.Scanner;
  • import java.util.*;

一种是单独导入一个类,另一种是导入该包下的所有的类(如果该包中还有其他的包,不到人这个包中的类,只导入当前包的所有类)

包的作用:

  • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

如果在当前包下的Java文件,最开始的时候必须使用package语句定义当前包。

back

for循环

java中,for循环有两种形式

一种是,如下


for(int i=0;i<n;i++){
	...
}

这样的形式,是知道循环的次数或者说知道一个极限值

另一种,如下:

举例:

int[]ans=new int[10];
for(int i:ans){
	...
}

这种可以用来依次处理数组(或者其它元素集合)中的每一个元素,而不用考虑指定下标值

for(variable:collection)
	statement

上面定义了一个变量用于暂存集合中的每一个元素,并执行相应的语句(当然,也可以是语句块)。collection这一集合表达式必须是一个数组或者是一个实现了iterable接口的类对象。

back

转义字符

所有的ASCII码都可以用 \\ 加数字(一般是8进制数字)来表示. Java语言中定义了一些字母前加""来表示特殊含义的字符, 如\\0,\\t,\\n等, 称为转义字符

如果在程序中,遇到\\的时候,需要特别注意。

转义序列 名称 Unicode值
\\b 退格 \\u0008
\\t 制表 \\u0009
\\n 换行 \\u000a
\\r 回车 \\u000d
\\" 双引号 \\u0022
\\\' 单引号 \\u0027
\\\\ 反斜杠 \\u005c

备注:

  • 码点(Code Point):码点是指一个编码表中的某个字符对应的代码值。
  • 代码单元(Code Unit):在具体编码形式中的最小单位。

back


参考《Java核心技术卷一》

如果转载,请转明出处,谢谢

https://www.cnblogs.com/Yunrui-blogs/p/12782807.html

以上是关于Java 基础的主要内容,如果未能解决你的问题,请参考以下文章

JSP 基础语法

Java基础:封装

[vscode]--HTML代码片段(基础版,reactvuejquery)

JSP开发中的基础语法

Java基础之方法的调用重载以及简单的递归

Java基础——JSP