JAVA基础知识点

本文详细介绍了JAVA语言的基础知识,包括语言特点、核心机制如JVM和垃圾收集,环境搭建,变量分类,运算符,流程控制结构如if-else, switch-case, 循环结构,以及特殊流程控制语句break和continue的使用。此外,还涵盖了数组的基本概念和数据结构的简单介绍。" 114462256,10540371,Java线程生命周期与状态控制详解,"['Java', '线程', '状态', '控制']
摘要由CSDN通过智能技术生成

JAVA语言特点

  1. 面向对象

    **两个基本概念:**类,对象

    **三大特性:**封装,继承,多态

  2. 健壮性

    吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制

  3. 跨平台性

    跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , RunAnywhere”
    原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

JAVA的核心机制

Java虚拟机 (Java Virtal Machine)

  • JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
  • 对于不同的平台,有不同的虚拟机。
  • 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行
  • Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行

垃圾收集机制 (Garbage Collection)

  • 不再使用的内存空间应回收—— 垃圾回收。
  • 在C/C++等语言中,由程序员负责回收无用内存。
  • Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
  • 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
  • Java程序还会出现内存泄漏和内存溢出问题吗?Yes!

Java语言的环境搭建

什么是JDK,JRE

image.png

JAVA声明

变量的分类

对于每一种数据都定义了明确的具体数据类型(强类型语言),在内存中分配了不同大小的内存空间。

image.png

按声明的位置的不同

  • 在方法体外,类体内声明的变量称为成员变量
  • 在方法体内部声明的变量称为局部变量

image.png

  • 注意:二者在初始化值方面的异同:

    :都有生命周期

    :局部变量除形参外,需显式初始化。

JAVA运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

  • 算术运算符
  • 赋值运算符
  • 比较运算符(关系运算符)
  • 逻辑运算符
  • 位运算符
  • 三元运算符

image.png

1.//(前)++ :先自增1,后运算
//(后)++ :先运算,后自增1
2.//(前)-- :先自减1,后运算
//(后)-- :先运算,后自减1
3.连接符:+:只能使用在String与其他数据类型变量之间使用。

赋值运算符

  • 符号:=
    • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
    • 支持连续赋值。
  • 扩展赋值运算符: +=, -=, *=, /=, %=

特别说明:

1.运算的结果不会改变变量本身的数据类型
2.开发中,如果希望变量实现+2的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 2;
方式二:num += 2; (推荐)

开发中,如果希望变量实现+1的操作,有几种方法?(前提:int num = 10;)
方式一:num = num + 1;
方式二:num += 1;
方式三:num++; (推荐)

image.png

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
  • 比较运算符“==”不能误写成“=”

逻辑运算符:

&—逻辑与 | —逻辑或

!—逻辑非 && —短路与

|| —短路或 ^ —逻辑异或

逻辑运算符区别:

“&”和“&&”的区别

  • 单&时,左边无论真假,右边都进行运算;
  • 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

理解:异或,追求的是“异”!
案例1:
public class Test {
    public static void main(String[] args) {
        //会员卡号:四位会员卡号,取百位数,如果百位数和幸运卡号相同的话就是幸运会员.不是的话,就写谢谢惠顾
        Scanner input = new Scanner(System.in);
        System.out.println("请输入你的会员卡号");
        int num = input.nextInt();
        int a = num/100%10;
        int random =((int)Math.random()*10);
        System.out.println(random);
        String s=(a==random)?"恭喜你中奖":"谢谢惠顾";
        System.out.println(s);


    }
}

JAVA流程控制-顺序结构

其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:

  • 顺序结构
    • 程序从上到下逐行地执行,中间没有任何判断和跳转。
  • 分支结构
    • 根据条件,选择性地执行某段代码。
    • 有if…else和switch-case两种分支语句。
  • 循环结构
    • 根据循环条件,重复性的执行某段代码。
    • 有while、do…while、for三种循环语句。
    • 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。

if-else选择结构

在Java程序中,如果要根据条件来决定是否执行某一段代码,就需要if语句。

public class AgeTest{
    public static void main(String args[]){
        int age = 75;
        if (age < 0) {
            System.out.println("不可能!");
        } else if (age > 250) {
            System.out.println("是个妖怪!");
        } else {
            System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
        }
    }
}

switch-case结构

除了if语句外,还有一种条件判断,是根据某个表达式的结果,分别去执行不同的分支。
例如,在游戏中,让用户选择选项:

  1. 单人模式
  2. 多人模式
  3. 退出游戏

这时,switch语句就派上用场了。 switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行。

    public class SwitchTest2 {
        public static void main(String args[]) {
            String season = "summer";
            switch (season) {
                case "spring":
                    System.out.println("春暖花开");
                break;
                case "summer":
                    System.out.println("夏日炎炎");
                break;
                case "autumn":
                    System.out.println("秋高气爽");
                break;
                case "winter":
                    System.out.println("冬雪皑皑");
                break;
                default:
                    System.out.println("季节输入有误");
                break;
            }
        }
    }

Switch规则:

switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);

case子句中的值必须是常量,不能是变量名或不确定的表达式值;

同一个switch语句,所有case子句中的常量值互不相同;

break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾,如果遗漏了break,就容易造成严重的逻辑错误,而且不易在源代码中发现错误。

default子句是可选的。同时,位置也是灵活的。当没有匹配的case时,执行default

switch和if语句的对比

if和switch语句很像,具体什么场景下,应用哪个语句呢?

  • 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高
  • 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。

JAVA流程控制-循环结构

循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。

  • 循环结构
    • 在某些条件满足的情况下,反复执行特定代码的功能
  • 循环语句分类
    • for 循环
    • while 循环
    • do-while 循环

循环语句的四个组成部分:

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

for循环

说明:

  • ②循环条件部分为boolean类型表达式,当值为false时,退出循环
  • ①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
  • ④可以有多个变量更新,用逗号分隔
    public class ForLoop {
        public static void main(String args[]) {
            int result = 0;
            for (int i = 1; i <= 100; i++) {
                result += i;
            }
            System.out.println("result=" + result);
        }
    }

while循环

语法:

image.png

    public class WhileLoop {
        public static void main(String args[]) {
            int result = 0;
            int i = 1;
            while (i <= 100) {
                result += i;
                i++;
            }
            System.out.println("result=" + result);
        }
    }

do-while循环

语法:

image.png

说明

do while循环先执行循环,再判断条件;
do while循环会至少执行一次。

    public class DoWhileLoop {
        public static void main(String args[]) {
            int result = 0, i = 1;
            do {
                result += i;
                i++;
            } while (i <= 100);
            System.out.println("result=" + result);
        }
    }

嵌套循环(多重循环)

  • 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环内层循环
  • 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
  • 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

说明

嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
内层循环:循环结构A
外层循环:循环结构B
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次
③ 外层循环控制行数,内层循环控制列数

break和continue

无论是while循环还是for循环,有两个特别的语句可以使用,就是break语句和continue语句。

break语句

break语句总是跳出自己所在的那一层循环

    public class BreakTest{
        public static void main(String args[]){
            for(int i = 0; i<10; i++){
                if(i==3)
                break;
                System.out.println(" i =" + i);
            }
            System.out.println("Game Over!");
        }
    }

continue 语句

break会跳出当前循环,也就是整个循环都不会执行了。
continue则是提前结束本次循环,直接继续执行下次循环。

  • continue只能使用在循环结构中
  • continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环
  • continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
    public class ContinueTest {
        public static void main(String args[]){
            for (int i = 0; i < 100; i++) {
                if (i%10==0)
                continue;
                System.out.println(i);
            }
        }
    }

return的使用

特殊流程控制语句

  • return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
  • 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内

特殊流程控制语句说明

  • break只能用于switch语句循环语句中。
  • continue 只能用于循环语句中。
  • 二者功能类似,但continue是终止本次循环,break是终止本层循环
  • break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
  • 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
  • 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。

JAVA数组

  • 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据行统一管理。
  • 数组的常见概念
    • 数组名
    • 下标(或索引)
    • 元素
    • 数组的长度

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。

数组的长度一旦确定,就不能修改

我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

数组的分类:

  • 按照维度:一维数组、二维数组、三维数组、…
  • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

数组的特点就是:元素类型是固定的、长度是固定的、通过角标查询,查询快,增删慢

2、分配空间:
	语法:数组名 = new 数据类型[数组长度];
	比如:scores = new int[30];
第一步和第二步可以一起写
	数据类型[] 数组名 = new 数据类型[数组长度];

3、赋值:
	语法:数组名[数组下标] = 数据;
	比如:scores[0] = 60;//表示将数组第一个空间存放了60这个整数
	      scores[1] = 80;
	
	直接声明数组时就进行赋值
	语法:数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据n};
	      数据类型[] 数组名 = {数据1,数据2,数据n};
	      注意:如果在声明数组时就直接赋值,那么不要写数组长度
	比如:int[] scores = new int[]{60,80,100,50,60,70};

	通过循环的方式动态的录入数据
	循环从初始0开始,到数组的最大长度结束,每次加1
	for(int i = 0;i < 5;i++){
		System.out.println("请输入第"+(i+1)+"名学生的成绩:");
		scores[i] = input.nextInt();
	}

4、数据的使用:将存放在数组空间中的元素拿出来使用
	使用循环的方式将存放在每个空间中数据拿出来使用	
	for(int i = 0;i < 5;i++){
		System.out.println("第"+(i+1)+"名的学生成绩为"+scores[i]);
	}
	数组名.length表示数组的长度
	比如:int[] scores = new int[10];
	      scores.length = 10;//数组长度为多少,该值就为多少

数据结构(了解)

1.集合 :数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
2.线性结构 :数据结构中的元素存在一对一的相互关系;
3.树形结构 :数据结构中的元素存在一对多的相互关系;
4.图形结构 :数据结构中的元素存在多对多的相互关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值