Java教程

【Java基础语法】

本文主要是介绍【Java基础语法】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JAVA基础语法

目录

  • JAVA基础语法
    • 1.JAVA概念
      • 1.1JAVA和C的区别
      • 1.2JAVA的跨平台性
      • 1.3JDK和JRE
      • 配1.4置环境变量
    • 2.关于IDEA
    • 3.标识符
      • 3.1约定俗成的命名规则
        • 3.1.1包的命名
        • 3.1.2类和接口的命名
        • 3.1.3变量和方法的命名
        • 3.1.4常量的命名
    • 4.注释
    • 5.常量
      • 5.1 进制
    • 6.变量
      • 6.1.数据类型
      • 6.2.注意事项
    • 7.运算符
      • 7.1 算数运算符
      • 7.2 赋值运算符
      • 7.3 关系运算符
      • 7.4 逻辑运算符
      • 7.5 位运算符
    • 8.流程控制
      • 8.1 顺序结构
      • 8.2 选择结构
      • 8.3 循环结构
    • 9.大数
    • 10.数组
      • 10.1 声明数组
      • 10.2 访问数组元素
      • 10.3 for each循环
      • 10.4 数组拷贝
      • 10.5 命令行参数
      • 10.6 多维数组
    • 11.方法
      • 11.1 概念
      • 11.2 方法重载
      • 10.3 注意事项

1.JAVA概念

1.1JAVA和C的区别

  • 跨平台
  • 面向对象
  • 健壮 安全性(无需自己生成内存、无指针)
  • 分布式 高效(初始JAVA未经优化)
  • 多线程 结构中立(独立于操作系统)
  • open sourse

1.2JAVA的跨平台性

  • JAVA运行在虚拟机上,而不是运行在物理机,因此可移植性强。代价就是JVM是不跨平台的。

1.3JDK和JRE

  • JRE(Java Runtime Environment)
  • JDK

配1.4置环境变量

  • path环境变量,相对路径写法,新建一个目录路径的定义,告诉操作系统javac可执行程序的位置
  • classpath,告诉JVM加载字节码文件的位置

2.关于IDEA

  • Project是工程的工作空间,Module是具体的一个个工程。
  • JAVA源代码必须放在JAVA源目录中(source root)
  • git更新,更新module

3.标识符

注意,不能是数字开头

3.1约定俗成的命名规则

3.1.1包的命名

  • 单级包全部小写
  • 多级包域名反转(保证了包名的唯一性)是虚拟的域名反转
    例: com.cskaoyan.name

3.1.2类和接口的命名

  • 一个单词 首字母大写,其他字母小写
  • 多个单词 大驼峰式

3.1.3变量和方法的命名

  • 一个单词 全部小写
  • 多个单词 小驼峰式

3.1.4常量的命名

  • 一个单词 全部大写
  • 多个单词 全部大写,单词间下划线分隔

4.注释

  • 单行 //
  • 多行 /* */
  • 文档 /** */

5.常量

5.1 进制

  • 二进制 0b11
  • 八进制 0b11
  • 十进制 11
  • 十六进制 0x11

6.变量

变量就是一片小的存储空间

6.1.数据类型

一定范围内的数据集合,和对数据集合的合法操作

  • 基本数据类型
    • 整数型 byte,short,int(默认),long
    • 小数型 float,double(默认)
    • 字符型
    • 布尔型
  • 引用数据类型

6.2.注意事项

  • 作用域
    变量有一定的生命周期,只在它所在的作用域中才有意义,作用域即变量所在的{}

    • 一旦超出了变量定义的作用域,就访问不到了
    • 在包含关系的作用域中不能出现重名的情况
  • 初始值
    变量在使用之前,必须赋初始值

  • 数据类型转化

    • 隐式类型转化
      • 不同数据类型运算时,JVM会先将数据转化成同一类型,具体是把范围小的数据类型转换成范围大的
      • boolean类型不能直接转化为其他类型
      • byte,short,char类型之间不会直接转化,而是以int类型的身份进行计算
    • 强制类型转化
      格式:目标类型 变量名=(目标类型)被转换的数据
      数据精度可能会丢失
      因此,声明float类型时,需要在数值后面加上f
    float f = 0.5F;
    long l = 99999999999L;//最好不要用小写l
    
    byte b = 1 + 2;//编译器进行了优化,因为是直接的常量计算,编译器会预先计算好结果,并检查是否在相应的数据类型所能取值的范围内t
    

    7.运算符

    7.1 算数运算符

    • +
      • 数值加法
      • 正号
      • 字符串拼接
    • - * /
    • %
    • ++ --(以++为例说明)
      建议不要在表达式中使用自加自减,容易出现bug
      • 单独运算时,++的位置在何处都不会有影响
      • 参与其他运算
        • c++ 先参与运算再自增
        • ++c 先自增再参与运算

    7.2 赋值运算符

    • += 复合运算包含强制类型转换

    7.3 关系运算符

    结果是布尔类型,是或否
    ==, !=, <, >, <=, >=

    7.4 逻辑运算符

    &, |, !, ^(异或), &&, ||, ?:

    &与&&,|与||的差别:&和|不太聪明,必须要执行完两侧运算才能进行逻辑运算,而&&不需要,比如第一个为false的话,另一个就不运算了

    7.5 位运算符

    • 移位 移位移的补码
      • 左移
        空位补零,高位丢弃
      • 右移
        • 带符号右移 >> 相当于除以二
        • 无符号右移 >>> 只有正数才是除以二
    • 与,或,异或
    • ~:所有位取反

    变量交换的方式
    1.定义中间变量
    2.计算技巧

    int a,b;
    a = a + b;
    b = a - b;
    a = a - b;
    

    3.异或运算

    int a,b;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    

    4.神头鬼脸

    int a,b;
    a = (a + b) - (b = a);
    

8.流程控制

作用域
变量有一定的生命周期,只在它所在的作用域中才有意义,作用域即变量所在的{},一旦超出了变量定义的作用域,就访问不到了。在包含关系的作用域中不能出现重名的情况

8.1 顺序结构

8.2 选择结构

  • if
  • if else
  • if else if else
  • switch
switch(choice){
    case 1:
    ...;
    break;
    case 2:
    ...;
    break;
    default://other value
    ...;
    break;
}

删除break语句在语法上没有错误,但是在当前case分支中的语句执行完后,而是继续执行相邻case分支中的语句
当然,并不是说这样不好,相反,有时候我们利用这种结构会减少所需要使用的代码量

case的标签可以是:
类型为char,byte,short,int的常量表达式
枚举常量
字符串字面量(Java7开始)

8.3 循环结构

循环控制变量贯穿始终
循环结构的四种基本语句

  1. 初始化语句
  2. 条件判断语句
  3. 循环体语句
  4. 循环控制语句
  • while
    先检测循环的条件

  • do statement while(condition)
    先执行语句再检测循环条件

  • for
    不成文的规矩:对同一个变量进行初始化、检测和更新
    建议不要使用浮点数判断相等条件,因为浮点数是近似值,有可能永远不满足条件

  • 带标签的break
    和C++的goto类似,只能跳出语句块,而不能跳进语句块。当然,不建议使用。

read_data:
...
while(condition){
    ...;
    if(condition2)
        break read_data;
}
  • continue
    跳过本轮循环,进入到下一轮循环

  • return
    方法的结束语句,具体内容在方法中展开

9.大数

如果基本的整数和浮点数不能满足需求,java.math中有两个很有用的类:BigInteger(任意精度整型运算)和BigDecimal(任意精度浮点数运算)。
如果需要进行算术运算,需要调用大数对象的方法。

具体的方法可以去Oracle官方网站查找API文档

BigInteger c = a.add(b);//c=a+b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d=c*(b+2)

10.数组

10.1 声明数组

int[] a = new int[100];//声明并初始化一个容量大小为100个整型变量的数组
int[] a = {2,3,4};
smallPrimes = new int[] {2,3,4};
//等价于
int anonymous = {2,3,4};
smallPrimes = anonymous;

Java中允许有长度为0的数组,但是和null并不等价

new elementType[0];
或者
new elementTypr[] {};

10.2 访问数组元素

根据数组下表访问数组,和C++一样

10.3 for each循环

for(variable : collection) statement;

variable变量用于暂存数组collection中的变量值

10.4 数组拷贝

Arrays的copyOf方法

10.5 命令行参数

public static void main(String[] args)
表明main方法将接收一个字符串数组,也就是命令行指定的参数,和C++不同,程序名没有存储在args数组中,命令行参数的第一个字符串即为args[0]。

10.6 多维数组

double[][] balances;//声明
balances = new double[NYEARS][NRATES];初始化
int [][] magicSquare = 
{
    {1,2},
    {3,4},
    {5,6}
};

for each循环不能自动处理二维数组中的每一个变量,需要使用两次:第一次是访问每一个数组,第二次是访问第一次访问数组中的每一个数组元素

Arrays.deepToString(a)可输出二维数组的数据元素列表

Java实际上没有二维数组,因此可以根据自己需要,使用不规则数组

11.方法

11.1 概念

  • 有返回值的方法
    形式参数和实际参数
    实际参数的值复制给形式参数,在方法体内参与运算后将结果返回到方法的返回值
  • 无返回值的方法

11.2 方法重载

一个类定义多个同名方法是没有问题的,方法重载需要遵守一定的规则:

  • 参数个数不同
  • 参数类型不同
  • 参数顺序不同(是参数类型的顺序)

Java区分方法的原理:
方法签名:方法名+参数列表 不会考虑方法返回值

方法重载便利了方法的调用,但不能忽视方法的定义

10.3 注意事项

  • 方法需要调用才能使用
  • 方法不能嵌套定义
  • 参数用逗号隔开
  • 注意返回值
这篇关于【Java基础语法】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!