Java零基础学习笔记(一)

简介: JavaSE是Java语言的基础平台,涵盖面向对象编程、基本语法、数据类型、运算符、流程控制、数组、排序算法及程序调试等内容。通过JDK搭建开发环境,结合IDE如IntelliJ IDEA,可高效编写与运行Java程序,适合初学者系统学习Java核心知识。

JavaSE基础

Java简介

  • Java是一门面向对象的程序设计语言
  • 1995年由sun公司发布
  • 2010被Oracle收购
  • JavaSE:Java标准版
  • JavaEE:Java企业版
  • JavaME:Java微型版

JVM

  • Java虚拟机
  • 一次编译,到处运行

JDK

  • Java语言的软件开发工具包
  • 两个主要组件:
    • javac 编译器,将源程序转成字节码
    • java 运行编译后的java程序(.class后缀的)
  • JDK=JRE+开发工具集
  • JDK8:长期支持版

JDK环境搭建

  • 到oracle官网下载安装

  • cmd输入java -version

  • 配置环境变量:

    高级系统设置

    环境变量

    设置用户变量

    path编辑,新建,输入jdk路径

  • 配置环境变量:

    用户变量-新建-变量名:JAVA_HOME 变量值:JDK路径

    改path,%JAVA_HOME%\bin

JRE

  • Java运行环境
  • 包括JVM、Java核心类库和支持文件
  • 如果只需要运行Java程序,下载并安装JRE即可
  • 如果要开发Java软件,需要下载JDK
  • 在JDK中附带有JRE
  • JRE=JVM+JavaSE标准类库

Eclipse

IntellijIDEA

  • Java编程公认最好的IDE
  • psvm:自动生成主方法
  • ctrl+shift+回车:自动增加结尾分号
  • sout:输出语句

Java基础语法入门

public class Hello{
   
    public static void main(String[]args){
   
        System.out.println("");
    }
}

变量与常量

标识符

  • 命名规则:
    • 可以由字母、数字、下划线和美元符组成,不能以数字开头
    • 严格区分大小写
    • 不能是Java关键字和保留字
    • 最好能反映出其作用

关键字

  • 一点一点记,50多个关键字

变量

  • 变量类型、变量名和变量值

  • 变量名命名规则:

    • 满足标识符命名规则
    • 符合驼峰法命名规范
    • 尽量简单,见名知意
    • 长度没有限制
  • 类的命名规范:

    • 满足Pascal命名法规范(每个单词的首字母大写)
  • 数据类型:

    • 基本数据类型

      • 数值型

        • 整型

          • byte(字节型)
            • 1个字节
          • short(短整型)
            • 2个字节
          • int(整型)
            • 4个字节
          • long(长整型)
            • 8个字节
        • 浮点型

          用科学计数法表示浮点型数据1.23E5,1.23×10的五次方

          • float(单精度浮点型)
            • 4个字节
            • 在字面值后加F或f
          • double(双精度浮点型)
            • 8个字节
            • 默认值,也可以在值后加d或D
      • 字符型(char)

        • 2个字节
        • 单引号内的单个字符
      • 布尔型(boolean:true、false)

        • 1个字节
    • 引用数据类型

      • 类(class)
      • 接口(interface)
      • 数组
  • 变量声明:

    格式:数据类型 变量名;

  • 赋值:

    使用=运算符进行赋值

    变量的初始化

  • 基本数据类型变量的存储

    • 类定义的变量又叫对象

    • 按作用范围分:

      类级、对象实例级、方法级、块级

  • ASCII码

  • Unicode编码(统一码)

    char c='\u005d';

    在值前面加前缀\u

  • 字符串字面值:字符串不属于基本数据类型,它是类

    双引号引起来的0个或多个字符

            String s1="Hello";
            System.out.println(s1);
            String s2="A\u005d\u005fB";
            System.out.println(s2);
    
  • 转义字符

    | 转义字符 | 描述 |
    | -------- | ---------------------------- |
    | \uxxxx | 4位16进制数所表示的字符 |
    | \' | 单引号字符 |
    | \" | 双引号字符 |
    | \ | 反斜杠字符 |
    | \r | 回车(光标回到这一行最前面) |
    | \n | 换行 |
    | \t | 横向跳格 |
    | \b | 退格 |

类型转换

  • 自动类型转换和强制类型转换

  • 自动类型转换(隐式类型转换)

    类型范围小的变量可以直接赋值给类型范围大的变量

    实线:无信息丢失的数据类型转换

    虚线:可能在转换时,出现精度丢失

1711864817974

  • 如果A类型的数据表示范围比B类型大,则将A类型的值赋值给B类型,需要强制类型转换

    如:double d = 123.4;

    ​ float f = (float)d;

    强制类型转换的格式:(数据类型)数值

常量

  • final int n = 5;
  • 不能修改
  • 一般常量名用大写来表示

运算符

  • 表达式:由运算符和操作数组成

算术运算符

进行基本的算术运算,加减乘除

算术运算符 名称 举例
+ 加法 5+10=15
- 减法 10-5=5
* 乘法 3*6=18
/ 除法 36/4=9
% 求余数 13%3=1
++ 自增 int n=3;n++
-- 自减 int n=4;--n

分子分母都是整型时,结果为整除后的结果

自增自减运算符

++、--

表达式 执行方式 结果(num1=1)
num2=++num1; num1=num1+1;num2=num1; num1=2;num2=2;
num2=num1++; num2=num1;num1=num1+1; num1=2;num2=1;
num2=--num1; num1=num1-1;num2=num1; num1=0;num2=0;
num2=num1--; num2=num1;num1=num1-1; num1=0;num2=1;

赋值运算符

变量 = 表达式;

赋值运算符从右往左运算!

+=、-=、*=、/=、%=

关系运算符

  • 比较运算符用于判断两个数据的大小

  • 比较的结果是一个布尔值

    大于、小于、大于等于、小于等于、==、!=

  • ‘A’>‘B’结果为false,比较的是两个字符的ASCII值

if条件结构
if(a > 0){
   
    a = 10;    
}
if-else条件结构
if(a > 0){
   
    a = 10;
}
else{
   
    a = 20;
}

逻辑运算符

名称 运算符
&&或&
\ \ 或\
!

&&运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算

||运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算

条件运算符

三目运算符

语法:布尔表达式?表达式1:表达式2

当布尔表达式的值为true,则返回表达式1的值,否则返回表达式2的值

例:max = a>b?a:b;

运算符优先级

从上到下优先级逐渐降低

运算符 描述
() 括号
!,++,-- 逻辑非,自增,自减
*,/,% 乘法除法取余
+,- 加法减法
<,<=,>,>= 小于,小于等于,大于,大于等于
==,!= 等于,不等于
&& 逻辑与
\ \ 逻辑或
=,+=,*=,/=,%=,-= 赋值运算符,复合赋值运算符

选择结构

多重if结构

if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else if(表达式3)
    语句3;
else
    语句n;

嵌套if结构

if(表达式1){
   
    if(表达式2){
   
        if(表达式3){
   
            语句;
        }
    }
}else{
   
    语句;
}

switch结构

switch(表达式){
   
    case 常量表达式1:
        语句1;break;
    case 常量表达式2:
        语句2;break;
    default:
        语句3;
}

循环结构

while循环

while(循环条件){
   
    语句;
}

do-while循环

do{
   
    语句;
}while(循环条件);
  • 至少执行一次
  • 循环条件后的分号不能丢

for循环

for(表达式1;表达式2;表达式3){
    语句;
}

三个表达式都是可以省略的

增强型for循环

  • 又叫foreach循环

  • 循环终止条件:把数组遍历一遍

    int[] arr = {
         1,2,3,4,5};
    for(int n:arr)
        System.out.println(n);
    

嵌套循环

break和continue
  • break语句可以结束当前循环的执行
  • 执行完break语句后,循环体中位于break语句后面的语句就不会被执行
  • 在多重循环中,break语句只向外跳一层

  • continue语句只能用在循环里

  • continue语句可以结束当前循环的执行,但是要继续下一次循环的执行

生成随机数

  • Random

  • 得到0-9的随机数的实现步骤:

    package com.zim.hello;
    
    import java.util.Random;
    
    public class HelloWorld {
         
        public static void main(String[] args) {
         
            Random r = new Random();
            int number = r.nextInt(10);
            System.out.println("随机数生成了:"+ number);
        }
    }
    

debug——程序调试

  • 让程序员能看清程序每一步的效果,在需要查看结果的时候,使用debug查看实际结果是否与预期结果一致
  • 设置断点——debug(F11)——进行单步调试(F6)

多断点调试

快捷键:F8

数组

  • 相同类型的数据按顺序组成的一种==引用数据类型==

一维数组

  • 数组的声明

    语法格式:数据类型[ ] 数组名;

    ​ 数据类型 数组名[ ];

    int[] myIntArray;
    int myIntArray[];
    

    语法格式一:先声明后创建

    数据类型[ ] 数组名;

    数组名 = new数据类型[数组长度];

    int[] arr;
    arr=new int[10];
    

    语法格式二:声明的同时创建数组(数组长度必须指定)

    数据类型[] 数据名 = new数据类型[数组长度];

    int[] arr = new int[10];
    
  • 数组会被分配连续的内存空间

  • 数组的初始化

    int[] arr = {
         1,2,3,4,5,6,7,8,9,10};
    

    数组的长度就是初始化时所给数组元素的个数

  • 数组元素的引用

    语法格式:数组名[下标]

    注意:下标从0开始

  • 数组长度

    属性length表示数组的长度,如a.length

二维数组

  • 声明(三种形式):

    int[][]  intArray;
    float  floatArray[][];
    double[]  doubleArray[];
    
  • 创建一个2行3列的数组

    intArray = new int[2][3];
    
  • 声明数组的同时进行创建

    char[][]  ch=new char[3][5];
    
  • 创建float类型的数组时,只指定行数

    floatArray=new float[3][];
    
  • 每行相当于一个一维数组,需要创建

    floatArray[0]=new float[3];
    floatArray[1]=new float[4];
    floatArray[2]=new float[5];
    
  • 二维数组的初始化

    int[][] num={
         {
         1,2,3},{
         4,5,6},{
         7,8,9}};
    

    num数组的行数为num.length

    num数组的列数为num[0].length

案例:随机排名

  • 某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报,请先依次录入5名员工的工号然后展示出一组随机的排名顺序
  • 分析:
    • 在程序中录入5名员工的工号存储起来-->使用动态初始化数组的方式
    • 依次遍历数组中的每个数据
    • 每遍历一个数据都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换
package com.zim.hello;
import java.util.Random;
import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        int[] codes = new int[5];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < codes.length; i++) {
            System.out.println("请您输入当前第"+(i+1)+"个员工的工号:");
            codes[i] = sc.nextInt();
        }
        Random r = new Random();
        for (int i = 0; i < codes.length; i++) {
            int index = r.nextInt(codes.length);
            int temp = codes[index];
            codes[index] = codes[i];
            codes[i] = temp;

        }
        for (int i = 0; i < codes.length; i++) {
            System.out.println(codes[i]);
        }
    }
}

键盘输入数据

利用buf调用readLine方法

import java.io.*;
public class class_name(
    public static void main(String[] args) throws IOException{
   
        String str;
        char c;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        str = buf.readLine();
        c = (char)buf.read();
    }
)

利用Scanner类

import java.util.*;
public class class_name{
   
    public static void main(Sring[] args){
   
        Scanner sc = new Scanner(System.in);
        int num;
        num = sc.nextInt();
    }
}

冒泡排序

  • 对一组整数按照从小到大的顺序进行排序
第一趟 34 12 32 53 17 56
第二趟 12 32 34 17 53 56
第三趟 12 32 17 34 53 56
package com.imooc;
public class SortDemo {
   
    public static void main(String[] args) {
   
        // TODO Auto-generated method stub
        int[] a= {
   34,53,12,32,56,17};
        int temp;
        for(int i=0;i<a.length-1;i++) {
   
            for(int j=0;j<a.length-i-1;j++) {
   
                if(a[j]>a[j+1]) {
   
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        for(int n:a) {
   
            System.out.println(n);
        }
    }
}

相关文章
|
10月前
|
存储 安全 Java
泛型在Java集合框架中的类型擦除机制是如何工作的?
泛型在Java集合框架中的类型擦除机制是如何工作的?
317 2
|
10月前
|
机器学习/深度学习 人工智能 供应链
智能体人才培养方向:对接国家“AI人才战略”的能力建设体系
“智能体来了”构建分层分类培养体系,覆盖高校学生、职场转型者与企业员工,通过实训实战与认证评价,提升岗位适配率至85%,助力破解AI人才短缺难题,精准对接国家人工智能发展战略。
|
10月前
|
运维 算法 数据可视化
基于MATLAB的自然图像梯度分布重尾特性验证方案
基于MATLAB的自然图像梯度分布重尾特性验证方案
|
10月前
|
人工智能 API 数据安全/隐私保护
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
1844 12
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
|
10月前
|
数据可视化 算法 安全
智能体赋能企业管理:数据驱动决策的治理现代化实践
北京某互联网公司HR每月核算百人绩效耗时3天、准确率仅85%。引入“智能体来了”HR智能系统后,通过API整合Jira、企业微信、CRM数据,采用Drools规则引擎实现考核逻辑可配置,ECharts可视化分析,将核算压缩至2小时,准确率达99%,离职预测准确率82%,助力企业迈向数据驱动管理,符合国家智能化升级与数据安全规范要求。
|
10月前
|
人工智能 安全 人机交互
溯源技术革命:新型数字水印如何让数据“开口说话”,指认泄密源头?
当敏感信息遭偷拍、打印外泄或录音外传,隐形数字水印如“数据守护者”悄然溯源,精准锁定泄密源头。跨屏幕、纸质、音视频等多介质,实现“电-光-电”“电-纸-电”“电-空-电”全链路追踪。从军工到金融,从会议到协作,水印技术正构筑数据安全“最后一公里”防线。AIGC时代,更将融合AI与区块链,守护数字真实性。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
UI-Ins:让 GUI 智能体真正“看懂”用户指令的新范式
通义实验室联合人大发布全新GUI Grounding模型UI-Ins,首创“指令即推理”范式,通过多视角动态推理实现SOTA性能,在五大基准全面领先,支持开源复现与应用。
1133 1
|
10月前
|
安全
UUID 与 MD5 重复概率深度分析
UUID与MD5均生成128位值,理论碰撞概率相同。但UUIDv4基于随机生成,实际重复概率极低,适合唯一标识;MD5依赖输入数据,存在已知安全漏洞,碰撞风险更高,不推荐用于安全敏感场景。
|
10月前
|
传感器 数据采集 编解码
ASTER L2 表面温度 V003
ASTER L2地表温度V003数据基于Terra卫星ASTER传感器的热红外波段,提供90米分辨率的地表动能温度,适用于火山、火灾、地表能量等研究。采用TES算法结合大气校正与MERRA-2再分析数据,提升精度。受电力故障影响,2024年11月28日至2025年4月15日TIR数据存在缺口。
296 5
|
10月前
|
安全 Java Linux
Cohesity NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案
Cohesity NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案
213 1
Cohesity NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案