Java基础

Java基础

Java入门

Java简介

由 Sun Microsystems 公司推出。后来 Sun 公司被 Oracle (甲骨文)公司收购。Java分为三个体系:

  • JavaSE(Java Standard Edition):java平台标准版,定位在个人计算机应用。
  • JavaEE(Java Enterprise Edition):java平台企业版,定位在服务器端应用。
  • JavaME(Java Micro Edition):java平台微型版,定位在消费性电子产品应用。(已经g了)

JavaSE包含于JavaEE中,JavaME与前二者有交集。

Java主要特性

  • 跨平台/可移植:其体系结构具有中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
  • 安全性:Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。
  • 简单性:C++简化版
  • 高性能:与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。
  • 分布式:支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库。
  • 多线程:在 Java 语言中,线程是一种特殊的对象。
  • 健壮性:一般不会造成计算机崩溃,有较强的异常处理。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。

Java应用程序的运行机制

Java结合了编译型和解释型,Java首先利用文本编辑器编写Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class;最后利用虚以机(解释器,java)解释执行。

JVM、JRE与JDK

  • JVM(Java Virtual Machine):Java虚拟机,用于执行bytecode字节码的虚拟机。
  • JRE(Java Runtime Environment):Java运行环境,包含虚拟机、库函数、运行Java程序所必须的文件。
  • JDK(Java Development Kit): Java 语言软件开发工具包,包含JRE,增加了编译器与调试器等。

基础语法

注释

  • 单行注释:

    //单行注释
    
  • 多行注释:

    /*
    多行注释
    */
    
  • 文档注释:

    /**
    文档注释
    */
    

注解

Annotation是从JDK5.0开始引入的新技术。 Annotation的作用:

  • 不是程序本身,可以对程序作出解释。(这一点,跟注释没什么区别)
  • 可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)

Annotation的格式:

  • 注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。

Annotation在哪里使用?

  • 可以附加在package,class,method,field等上面,相当于给它们添加 了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

常见内部注解:

  • @Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。
  • @Deprecated:定义在java.lang.Deprecated中,此注释可用于修辞方法、属性、类, 表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
  • @SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。

标识符

标识符需要遵守一定的规则:

  • 标识符必须以字母、下划线_、美元符号$开头。
  • 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
  • Java 标识符大小写敏感,且长度无限制。
  • 标识符不可以是Java的保留字。

关键字

abstract assert boolean break byte
case catch char const continue
default do double else extends
final finally float for goto
if implements import instanceof int
interface long native new null
package private protected public return
short static strictfp super switch
synchronized this throw throws transient
try void volatile while

Java变量

Java 中主要有如下几种类型的变量:

  • 局部变量:方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。

  • 类变量(静态变量):使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。

  • 成员变量(非静态变量/实例变量):方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。

    数据类型 默认初值
    int 0
    double 0.0
    char '\u0000'
    boolean false

Java常量

在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

  • 字面常量
  • 符号常量

数据类型

基本数据类型

  • 数值型
    • byte:1字节,表示范围 -128 ~ 127。
    • short:2字节,表示范围 -32768 ~ 32767。
    • int:4字节,表示范围 -2147483648 ~ 2147483647。
    • long:8字节,表示范围 263 ~ 2631
    • float:4字节,表示范围 -3.403E38~3.403E38
    • double:8字节,表示范围 -1.798E308~1.798E308
  • 字符型
    • char:2字节,用单引号表示
  • 布尔型
    • boolean:1位,与C不同的是,不可以使用 0 或非 0 的整数替代 true 和 false。

引用数据类型

  • class
  • interface
  • 数组

运算符

  • 算数运算符
    • 一元运算符
    • 二元运算符
  • 赋值运算符
  • 扩展运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 字符串连接符
  • 条件运算符

类型转换

  • 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型

  • 强制类型转化:显式的转换一个数值的类型

    (type)var
    

简单键入与输出

import  java.util.Scanner;

public class TestScanner {
    public static void main(String[] args) {
        Scanner   scanner =  new Scanner(System.in);
        String   a =  scanner.nextLine();
        String  b = scanner.nextLine();
        int   c = scanner.nextInt();
    }
}

控制语句

选择结构

  • if单选择结构
  • if - else双选择结构
  • if- else if -else多选择结构
  • switch结构

循环结构

  • for循环
  • while循环
  • do - while循环

break与continue

  • 用法与C一致

  • 带标签的break和continue:

    “标签”是指后面跟一个冒号的标识符,例如:“label:”。随同标签使用,它们就会中断到存在标签的地方。

    public class Test18 {
        public static void main(String args[]) {
            outer: for (int i = 101; i < 150; i++) {
                for (int j = 2; j < i / 2; j++) {
                    if (i % j == 0){
                        continue outer;
                    }
                }
                System.out.print(i + "  ");
            }
        }
    }
    

数组

数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点:

  • 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型。
  • 数组类型可以是任何数据类型,包括基本类型和引用类型。

声明数组

dataType[] arrayRefVar;   // 首选的方法
//或
dataType arrayRefVar[];  // 效果相同,但不是首选方法

建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。

创建数组

arrayRefVar = new dataType[arraySize];

上面的语法语句做了两件事:

  • 一、使用 dataType[arraySize] 创建了一个数组。
  • 二、把新创建的数组的引用赋值给变量 arrayRefVar。

声明和创建可写在同一句:

dataType[] arrayRefVar = new dataType[arraySize];

初始化

  • 静态初始化

    int[] a = { 1, 2, 3 };// 静态初始化基本类型数组;
    Man[] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;
    
  • 动态初始化

    int[] a1 = new int[2];//动态初始化数组,先分配空间;
    a1[0]=1;//给数组元素赋值;
    a1[1]=2;//给数组元素赋值;
    
  • 默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

    int a2[] = new int[2]; // 默认值:0,0
    boolean[] b = new boolean[2]; // 默认值:false,false
    String[] s = new String[2]; // 默认值:null, null
    

For-Each 循环

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

for(type element: array)
{
    System.out.println(element);
}

数组的拷贝

System类里也包含了一个方法,将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素:

static void arraycopy(object src,int srcpos,object dest, int destpos,int length)

可以通过拷贝操作实现数组的删除、插入、扩容等。

Arrays类

ava.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

  • 给数组赋值:public static void fill(int[] a, int val)
  • 对数组排序:public static void sort(Object[] a)
  • 比较数组:public static boolean equals(long[] a, long[] a2)
  • 查找数组元素:public static int binarySearch(Object[] a, Object key)
    • 该方法使用二分法,需体提前排序。
posted @   AncilunKiang  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示