Java_1_基础语法

Java跨平台原理

平台是指操作系统:

  • Windows
  • Mac
  • Linux

JVM是运行java程序的虚拟机,其本身非跨平台,实际跨平台是java程序

Java开发环境

  • JVM(Java Virtual machine)虚拟机,class文件运行所在地
  • JRE(Java Runtime Environment)运行环境,包括JVM与核心类库
  • JDK(Java Development kit)开发工具,包括JRE与编译运行工具

JDK安装目录

  • bin 存放JDK各种工具命令
  • conf 存放JDK配置文件
  • include 存放平台特定头文件
  • jmods 存放JDK各种模块
  • legal 存放JDK各模块授权文件
  • lib 存放JDK工具补充的jar包

IDEA项目结构

  • 层级关系:project->module->package->class
  • 每个上级可创建并管理多个下级,该结构的划分为了方便管理类文件
package包使用

作用:

  1. 区分相同名字的类
  2. 类数量多的时候,可以管理类
  3. 控制访问范围

基本语法:

  1. package com.xxx,package关键字表示包,com.xxx包名
  2. 只能包含数字、字母、下划线、小圆点,但不可数字开头,不为关键字和保留字
  3. com.公司名.项目名.业务模块名,如com.sina.crm.user
  4. import java.util.*;引入java.util包下的所有类,推荐按需导包
  5. 同一类名于两个不同包下,一个可以import导包,另一个需全类名使用

本质:创建不同的文件夹来管理类

java中常用的包:

  1. java.lang.*基本包,默认引入
  2. java.util.*util包,系统提供的工具类,如Scanner
  3. java.net.*网络包,用于网络开发
  4. java.awt.*java界面开发,GUI

IDEA快捷方式

  • alt+1 打开/隐藏工程目录结构
  • alt+4 打开/隐藏控制台
  • ctrl+alt+l 格式化代码
  • alt+enter 代码修正提示
  • ctrl+D 向下复制一行
  • ctrl+X 剪切当前行
  • ctrl+/ 单行注释
  • ctrl+alt+/ 多行注释
  • alt+shift+↑ 上移当前行
  • alt+shift+↓ 下移当前行

Java变量及其规范

变量是在内存中开辟的存储空间,用于存放数据,一个声明的变量对应一块内存空间。

声明并赋值:int a = 5;

变量命名规范:

  • 字母、数字、_ 、$为命名,不可数字开头,可中文命名,但不推荐
  • 严格区分大小写,驼峰命名(小驼峰适用于变量、方法命名,大驼峰适用于类命名)
  • 不能使用关键字
变量缓存机制

java使用了中间变量缓存机制,在执行自增运算的时候,会为每个自增操作分配一个临时变量。如果是前缀加(++i)会先自加1后赋值(给临时变量),如果是后缀加(i++),就会先赋值后加1,运算最终使用的并不是变量本身,而是被赋了值的临时变量。

Java常量简介

可于Java程序中直接写出来的数据,或在程序执行过程中不可改变的值(被final关键字修饰),分为字符串常量、整数常量、小数常量、字符常量、布尔常量。

常量优化机制

​ 在给一个变量赋值的时候,如果=的右边全部是常量(包括final关键字定义的常量在内),那么在编译阶段计算出结果;如果范围不超过左边的变量类型的范围,那么就会赋值成功如果超过就会赋值失败。右边如果存在变量,则不会触发常量优化机制。

byte a = 3;
byte b = 4;
byte c = 3 + 4; //触发常量优化机制,编译通过
//byte c = a + b; 两个变量转为int类型,相加后无法直接赋值给byte类型,报错
byte d = (byte)(a + b);//强转之后,不会报错

Java数据类型

基本数据类型

整数型:btye(1)、short(2)、int(4)、long(8)

  • 整数运算超出范围会发生溢出(避免),BigInteger无穷类型解决
  • 整数字面量默认为int,超出int类型范围会报类型错误。
  • byte、short、int、long都可直接用int类型常量值创建
  • long常量需要在值后面加L或l
  • 运算时若可能溢出,建议第一个值加L
  • byte-(-128~127)、int-21亿溢出、long-200亿溢出

浮点型:float(4)、double(8)

  • 小数默认double,float类型值需加F或f
  • double运算会出现舍入误差,原因是二进制转换误差

符号(字符)型:char(2)

  • 采用Unicode编码(Unicode包含ASCII),字符对应码
  • 表现是字符char,实际上码int,可直接用int类型常量值创建
  • 字符字面值放入单引号中,且只有一个

布尔型:boolean(1)

System.currentTimeMilis()获取1970.1.1零点到此刻的毫秒数,数据类型是long

BigDecimal类可以实现精准运算

引用数据类型
  1. 类(class)
  2. 接口(interface)
  3. 数组([])
Java类型转换

类型容量小到大(两条线不互通):

  1. char、int、long、float、double
  2. byte、short、int、long、float、double

自动类型转换:小类型转为大类型:

  1. 多种类型数据混合运算,所有数据自动转换为其中最大容量的类型
  2. byte、short和char三者进行运算时全先转为int类型
  3. boolean不参与转换

强制类型转换:大类型转为小类型:

  1. 强转可能会发生溢出、丢失精度
  2. 强制转换:long b = 10000000000L; int a = (int)b;
  3. 强转符只对最近的值有效,可使用小括号提高优先级

基本数据类型和String类型转换(包装类转换):String转换为基本数据类型时,要确保String类型能后转成有效数据,如"123"可转为整数,但是"hello"不可以,会抛出异常

Java运算符

优先级及其结合性
优先级运算符结合性
1()、[]左到右
2!、+(正)、-(负)、++、–右到左
3*、/、%左到右
4+(加)、-(减)左到右
5<<、>>、>>>左到右
6<、<=、>、>=、instanceof左到右
7==、!=左到右
8&(按位与)左到右
9^左到右
10|左到右
11&&左到右
12||左到右
13? :右到左
14+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>=右到左

小括号>单目运算符>算数运算符>位移运算符>比较(关系)运算符>逻辑运算符>三元运算符>赋值运算符

运算符注意事项
  1. % 取模运算符本质:a - a / b * b
  2. 逻辑运算符最终结果为boolean值
  3. ^ 异或运算符,不同为真,相同为假
  4. 复合赋值运算符会进行类型强转,例如byte a = 1; a += 1;等价于a = (btye)(a + 2);
  5. 三元运算法问号后的两个表达式需为可直接赋值给接收变量的类型(或可自动转换)
  6. 自加++和自减–时会进行强制类型转换,例如double a = 1.0; a++;等价于a = (double)(a+1);;并且会使用到java缓存变量机制
三目运算符解析
  1. 如果定义了数据类型的变量与未定义变量的数值 共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型,若两个操作数中有一个是常量数字S,另外一个是表达式,且其类型为T;若数字S在T的范围内,則转换为T类型;若S超出了T类型的范围,则T转换为S类。
  2. 如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型
  3. 如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型
  4. 如果是两个包装类进行后双目运算,则自动拆箱为基本数据类型后,再自动转为最大精度的基本数据类型;最后根据接收变量的类型决定是否装箱。

Java分支控制

  1. 单分支:if; 双分支:if-else; 多分支:if - else if - else;
  2. 分支可以嵌套,但建议不超过三层(可读性不好)
  3. switch中表达式数据类型应与case后的常量类型一致,或是可以自动转换成可比较的类型,如char表达式和int常量
  4. switch表达式返回值需为:byte、short、int、char、enum、String
switch的case穿透现象

在switch语句中,如果case后的代码块不以break结束,会出现穿透现象。

现象:发生case后,后续case将不会具有匹配效果,且其内部的语句都会执行。

应用场景:当switch语句中多个case中的语句出现重复,可考虑使用case穿透现象进行代码优化。

Java循环控制

三种循环区别:

  • for、while先判断后执行,do…while先执行后判断

三种循环应用场景:

  • 明确循环次数,推荐for
  • 不明确循环次数,根据需求选择while、do…while
  • break默认终止最近的循环体,可通过标签指明终止哪一个循环体
  • continue默认跳过最近的本次循环体,可通过标签指明跳过哪一个循环体
loop:while(true){
    switch(a){
        case 0:break loop;//指明结束的是loop标签的while循环
    }
}

Random类的使用

作用:根据开发者的需求产生一个随机数(伪随机数)

Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。

Random r = new Random();
int a = r.nextInt(10);//产生[0,10)范围的随机Int类型

Java的进制

  • 十进制:Java中的值默认十进制,无需修饰
  • 二进制:数值前以0b修饰
  • 八进制:数值前以0开头
  • 十六进制:数值前以0x开头

注意:java中任何进制的值在控制台打印时,皆以十进制展示

进制间转换

系数:每位上的数 基数:n进制的基数是n 权:从进制数右边起由0递增

n进制转十进制:系数*基数的权次幂相加

十进制转n进制:除基取余,余数倒置

二进制转n进制(十进制除外):2^i=n,右边起取i位二进制数为一组转为n进制数

原码反码补码

计算机所有运算都是以二进制补码的形式进行!!!

正数的原码、反码、补码三码合一

负数的反码是其原码符号位不变,其余位取反;补码是反码加1

位运算符
  1. 按位与&
  2. 按位或|
  3. 按位异或^:相同为假,不同为真(¬a∧b) ∨ (a∧¬b)
  4. 按位取反~:全部取反,包括符号位
  5. 算数右移 >> :低位溢出,符号位补高位
  6. 算数左移 <<:符号位不变,低位补0
  7. 逻辑右移 >>>:低位溢出,高位补0
  8. 算数左右移的本质是,左乘右除 2的n次方

异或实现数据交换:

在这里插入图片描述

Java数组

数组介绍与使用
  • 数组(Array)是一种容器,用来存储同种数据类型的多个值。

  • 数组是引用数据类型,本质是一个对象

//动态初始化数组:数据类型[] 数组名 = new 数据类型[数组长度];
//动态初始化,指定数组长度,系统会为数组容器中每个成员分配初始值
int[] arr = new int[5];

//静态初始化数组:数据类型[] 数组名 = new 数据类型[]{值1,值2,值3};
//静态初始化:指定数组要存储的元素,系统自动计算数组长度
int[] arr = new int[]{1,2,3};
int[] arr2 = {1,2,3};//静态初始化数组简化版,new的过程依旧存在

使用数组的注意事项:

  1. 数组下标越过指定范围就会报异常:ArrayIndexOutOfBoundsException
  2. 数组创建未赋值,系统自动赋予默认值(整型为0;浮点型为0.0;字符型为\u0000;布尔型为false;引用类型为null)
  3. 数组变量存放于栈内存中,其保存的引用指向堆内Array对象
  4. 可通过数组名.length获取数组长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值