Java基础知识点(标识符、数据类型、变量、运算符、包机制、流程控制、方法、数组)

标识符

Java标识符的命名规则如下:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始;
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合;
  • 不能使用关键字作为变量名或方法名;
  • 标识符是大小写敏感的;
  • JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准的国际字符集。因此,这里的字母的含义:可以表示英文、汉字等等。

数据类型

强弱类型语言

Java是一种强类型语言,每个变量都必须申明其类型
下面是强类型语言弱类型语言的解释:

  • 强类型语言也称为强类型定义语言,要求变量的使用要严格符合规定,所有的变量必须先定义后才能使用。
  • 弱类型语言也称为弱类型定义语言,要求与强类型定义相反,例如Java Script 中 var i 可以定义任何类型。

数据类型

Java的数据类型分为两个大类:基础类型(primitive type)和引用类型(reference type)。

基础类型

下面是Java中基础数据类型:
在这里插入图片描述
位、字节、字符、编码详解

  • 位(bit):是计算机内部数据存储的最小单位,例如:11001100是一个8位的二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯用大写B来调试,其中1B(byte,字节) = 8bit(位);

  • 字符:是指计算机中使用的字母、数字、字和符号。

  • 常见编码:
    ASCIIS码
    1个英文字母(不区分大小写)= 1个字节空间;
    1个中文汉字 = 2个字节的空间 ;
    1个ASCII码 = 1个字节。

    UTF-8编码
    1个英文字符 = 1个字节空间;
    1个英文标点 = 1个字节;
    1个中文 = 3个字节;
    中文标点= 3个字节。

    Unicode编码
    1个英文字符 = 2个字节;
    1个英文标点 = 2个字节;
    1个中文 = 2个字节;
    1个中文 = 2个字节。

  • 操作系统32位和64位:32位操作系统只可以使用32位的CPU,64位的CPU既可以安装32位操作系统也可以安装64位操作系统。寻址能力简单来说就是支持的内存的大小,64位操作系统最多可以支持128G的内存,32位操作系统最多支持4G内存。

类型转换

  1. Java是强类型语言,因此在运算的时候,需要用到类型转换。 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化位同一类型,然后进行运算。
  2. 转换优先级:byte,short,char -> int -> long -> float -> double。
  3. 转换规则:
    • 不能对boolean类型进行类型转换;
    • 不能把对象类型转换成不相关的对象;
    • 在把容量大的类型转换成容量小的类型时必须使用强制类型转换;在转换过程中可能导致溢出或损失精度;
    • 浮点数到整数的转换是通过舍弃小数得到的,并不是四舍五入。
  4. 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型,
    • 例如:short数据类型的位数为16,可以自动转化为位数32的int类型,float的数据类型的位数是32,也可以转换为64位的double类型。
      在这里插入图片描述
  5. 强制类型转换:强制将一个类型转换另一个类型,中间可能是在丢失信息的情况下进行的转换,可能造成精度降低或者溢出。
    在这里插入图片描述 在这里插入图片描述
  6. JDK7扩展:
    二进制数:用0b开头即可,例如:int a = 0b0101,代表int a = 5。
    下划线分割符:可以用下划线来分割长的数字,例如:int a = 1_234_567。

常量与变量

变量的定义

  • 变量就是变化的量。Java是一种强类型语言,因此每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
  • 变量在使用前都必须对其声明,只有在声明后,才能为其分配对应长度的存储单元,
    申明格式为: type varName [=value] [{,varName[=value]}] ;
    数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。

变量作用域

  • 局部作用域(local variable):类的方法或者语句块中定义的变量,生命周期从声明位置开始到“}“截止;局部变量没有默认值,在使用前必须先声明和初始化(赋初值)在这里插入图片描述
  • 实例变量(成员变量,member variable):方法外、类的内部定义的变量,没有statc修饰,从属于对象,其生命周期伴随对象始终,如果没有进行初始化,会自动初始化成该数据类型的默认初始值。数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false。
  • 静态变量(static variable):类中独立于方法外的变量,用static修饰,从属于类,生命周期伴随类的始终,从类加载到卸载。如果没有进行初始化,会自动初始化成该类型的默认初始值。数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false。

变量命名规范

  • 所有变量、方法、类名,都应该见名知意。
  • 类成员变量、局部变量、方法名:首字母小写和驼峰原则。
  • 常量:全部大写字母和下划线。
  • 类名:首字母大写和驼峰原则。

常量

  • 初始化后不能再改变的值,是一种特殊的变量。例如:final 常量名=值;
    double PI=3.14; final String LOVE=“hello”;

  • 常量名一般使用大写字符。

运算符

Java 语言支持如下运算符

  • 算术运算符: + 、- 、* 、/ 、% 、++ 、–
  • 赋值运算符 =
  • 关系运算符: > 、< 、>= 、<= 、== 、!= 、instanceof
  • 逻辑运算符: && 、 || 、! 、 & 、 | 、^ 、~ 、
  • 位运算符: >> ,<< ,>>> (了解!!! )
  • 条件运算符 : ? (也叫三目运算符号)
  • 扩展赋值运算符:+= 、-=、*= 、/=

特殊的运算:

  • 二元运算符:
    1.如果两个操作数有一个为long,则结果也为long。
    2.没有long时,结果为int,即使操作数全为short/byte,结果也是int。
    3.如果两个操作数有一个为double,则结果为double,只有两个操作数都是float,其结果才为float。

  • 取模运算(%)
    简单来说就是取余,例如:5%3 = 2。其规律是:
    负数%负数=负数;
    负数%正数=负数;
    正数%负数=正数;

  • 一元运算符
    自增(++)自减(–),自增自减符号在前,表示先自增自减后赋值,自增自减再后,表示先赋值再自增自减。
    Java中的乘幂使用Math.pow()进行处理,Java代码中的^符号表示异或关系。

包机制

  • Java中采用包机制来处理类名的冲突问题,方便类的查找和使用。
  • 包采用了树形目录的存储方式,同一个包中的类名是不同的,不同包中的类名是可以相同的,当同时要调用两个不同包中相同类名的类时,应该加上包名进行区分。
  • 包也设定了访问权限,拥有包访问权限的类才能访问某个包中的类。
  • 包的使用用import关键字进行导入。

流程控制

Java的基本结构是顺序结构,除非特定指明,否则就是按照程序一句一句进行执行的。

选择结构

  • if单选择结构
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
  • if双选择结构
 if(布尔表达式){
   //如果布尔表达式的值为true  
}else{
    //如果布尔表达式的值为false
 }
  • if多选择结构
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
  • 嵌套if结构
if(布尔表达式 1){
 如果布尔表达式 1的值为true执行代码
 if(布尔表达式 2){
 如果布尔表达式 2的值为true执行代码
  }
} 
  • switch多选择结构
switch(expression){
  case value :
  //语句
  break; //可选
  case value :
  //语句
  break; //可选
  //你可以有任意数量的case语句 default : //可选
  //语句
}
switch case语句有如下规则:
   1.switch语句中的变量类型可以是:byte、short、int 或者 char。从 Java SE 7 开始,switch支持字符串String类型了同时case标签必须为字符串常量或字面量。
   2.switch语句可以拥有多个case 语句。每个case后面跟一个要比较的值和冒号。
   3.case语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
   4.当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break 语句出现才会跳出switch语句。
   5.当遇到break语句时,switch语句终止。程序跳转到switch 语句后面的语句执行。case语句不必须要包含break语句。如果没有break语句出现,程序会继续执行下一条case 语句,直到出现break 语句。
   6.switch 语句可以包含一个default 分支,该分支一般是switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default在没有case语句的值和变量值相等的时候执行。default分支不需要break语句。

switch case执行时,一定会先进行匹配,匹配成功返回当前case的值,再根据是否有break,判断是否继续输出,或是跳出判断。

如果case语句块中没有break语句时,匹配成功后,从当前case开始,后续所有case的值都会输出。如果后续的case语句块有break语句则会跳出判断。【case穿透】

循环结构

  • while循环
while( 布尔表达式 ) {
//循环内容
}
  • do…while循环
do {
//代码语句
}while(布尔表达式);
  • for循环
for(初始化; 布尔表达式; 更新) {
//代码语句
}
  • 增强for循环
for(声明语句 : 表达式){
//代码句子
}

方法(Method)

  • 定义解释
    1.Java方法是语句的结合,它们组合在一起执行一个功能。
    2.方法是解决一类问题的有序组合;方法包含于类中或者对象中;方法在程序中被创建,在其他地方被引用。
    3.设计方法原则:方法的本意就是功能块,就是实现某个功能的语句块的集合。因此在设计时,最好保持方法的原子性,也就是一个方法只完成一个功能,这样有助于后期的扩展。

  • 方法的定义

修饰词 返回值类型 方法名(参数类型 参数名) {
  ...
  方法体
   ...
  return 返回值;
}
  • 方法参数类型
    1.形参。
    方法参数列表中的参数就是方法的形参(形式上参数)。
    2.实参。
    调用方法是向方法传递的参数就是实参(实际上参数)

  • 方法的调用
    Java方法的调用参数传递的值传递,其有如下好处:
    1.只规定一种传递方式,简单易懂。
    2.传递的是数据副本,不是原始数据,在方法中不能根据参数修改原始数据,更加安全。
    3.只传递数据副本,而不是整个数据对象,减少内存开销和时间消耗。
    调用参数是基础类型的时候,使用的是值传递,参数是引用类型时候,形参传递的是该对象的内存地址,是引用传递。

以下代码演示了 Java 中的值传递:
public class PassByValueExample {
    public static void main(String[] args) {
        int x = 5;
        System.out.println("Before method call: " + x);
        modifyValue(x);
        System.out.println("After method call: " + x);
    }

    public static void modifyValue(int value) {
        value = 10;
        System.out.println("Inside method: " + value);
    }
}

输出结果为:
Before method call: 5
Inside method: 10
After method call: 5
调用规则:
1.非静态方法(非static)被调用时,一定是使用对象进行调用的。
2.静态方法(staic)既可以使用类名进行调用,也可以使用对象进行调用。
3.静态方法与非静态方法之间的调用,一定是非静态方法调用静态方法。
  • 方法重载
    1.方法名相同,参数列表不同的两个方法就是重载方法。
    2.不能仅仅根据修饰符和返回值类型来判断是否重载。
    3.Java编辑器根据方法签名来判断那个方法应该被调用。

数组

概述

  • 定义
    数组可以看作是一个类型的所有数据的集合,有一下定义:
    1.数组是相同类型数据的有序集合。
    2.数据描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成的。
    3.其中,每一个数据称为数组的元素,每个数组元素可以通过数组下标来访问
  • 特点
    1.数组的长度是确定的,数组一旦被创建,它的大小是不可改变的。
    2.其元素是相同类型的,不允许出现混合类型。
    3.数组中的元素可以是任何类型,包括基本类型和引用类型。
    4.数组变量本身属于引用类型,数组也可以看作是对象,数组对象本身是在堆内存中。

申明创建

  • 申明创建
//有两种方式:
 - dataType[] arrayName = new dataType[arraySize];
2.dataType arrayName[] = new dataType[arraySize];
//一般建议采用第一种的风格进行声明。
  • 内存分析
    1.数组声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时候才与长度有关,因此,声明数组时不能指定其长度,例如:int a[5]非法。
    2.声明一个数组的时候,该数组并没有被真正的创建。
    3.构造一个数组,必须指定长度。

  • 三种初始化

1.静态初始化。
除了用new关键字类产生数组外,还可以直接定义数组的同时,就为数组元组分配空间并赋值。
例如:int[] a = {1,2,3};
2.动态初始化。
定义数组和为数组分配空间、赋值的操作分开进行。
例如:int[] a = new int[2];a[0]=1;a[1]=2;
3.默认初始化。
数组是引用类型,它的元素相当于类的实例变量,因此数组分配空间后,其中的每个元素都会按照数组类型进行初始化赋值,也叫隐式初始化。
  • 数组边界
    数组的下标合法区间是:[0,length-1],超过这个区间就会报错(ArrayIndexOutOfBoundsException)

java.util.Arrays类

  • 打印数组:Arrays.toString(arrayName);
  • 数组排序:Arrays.sort(arrayName);
  • 二分查找:
    先排序:Arrays.sort(arrayName);
    再查找:Arrays.binarySearch(arrayName,searchValue);
  • 元素填充:Array.fill(arrayName,indexStart,indexEnd,fillValue);
  • 数组转化为List:Array.asList(arrayName);
  • 31
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry-Leo

帮到了您,有闲钱,再打赏哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值