Advertisement

Java编程语言基础

阅读量:

Java编程语言基础

一、标识符

在Java源程序中,程序员拥有命名权的单词被视为标识符。这些标识符能够标识类名称、方法名称、变量名称、接口名称以及常量名称等。

2、标识符的命名规则?(如果不遵循这个规则编译器会报错这是语法)
-一个合法的标识符仅允许包含数字、字母以及下划线_和美元符号$
-不允许以数字开头
-区分大小写
-不允许使用关键字作为标识符
-理论上无限制长度但是最好不要超出必要长度。

标识符命名规范遵循何种规则?(仅作为命名风格参考)

类名为 UserService

遵守驼峰命名方式

类名、接口名:名称含义明确

变量名、方法名:名称开头小写,并遵循多词首字母大写的习惯

常量名:名称全部大写,并且若有多词,则用下划线隔开

二、字面值

1、字面值就是数据

  • 整数类型的常量包括10100
  • 浮点类型的常量如3.14
  • 布尔类型的常量true和false表示逻辑状态。
  • 字符串类型的主要示例为'\texttt{abc}'(即"abc")以及'\texttt{中国人}"(即"中国人")。
  • 字符类型的主要示例为'\texttt{A}'(即'A')以及'\texttt{人}"(即"人")。\note{例如,在Java中使用未正确包围的单个字符会导致编译错误}
    注意:
    在Java语言中:
  • 所有的字符串类型常量必须用双引号括起来(双引号为半角);
  • 所有的字符类型常量必须用单引号括起来(单引号为半角)。

三、变量

什么是变量?
从本质上说,在内存中占据一块空间的就是变量。
它具有以下三个要素:数据类型、名称以及存储的数据的具体值。
它是最基本的数据存储单元。

2、数据类型的作用
*不同数据类型对应不同的存储空间需求
*每个数据类型的内存占用量各不相同
*数据类型决定了程序在运行时所需的内存空间大小

变量规定:在变量存储的具体值必须与该变量的数据类型保持一致;如果存在不匹配的情况,则会导致编译错误。

4、声明/定义变量的语法格式:
数据类型 变量名;

5、在变量声明后进行赋值时遵循以下语法规范:
在变量名后面紧跟等于字面量;
请注意以下事项:所使用的字面量数据类型需与目标变量的数据类型保持一致;
其中等于号属于运算符家族;
此外,请确保赋值操作中采用如下原则:先计算等号右侧表达式的具体数值或对象;然后将计算结果应用至左侧目标位置;

6、声明和赋值可以放到一起完成
例如: int i = 10;

在对变量进行赋值后,还可以对其进行重新赋值.例如: int i=10; System.out.println(i);//当前数值 i=25; System.out.println(i);//当前数值 i=5; System.out.println(i);//当前数值

8、有了变量的概念之后,内存的空间得到重复的使用

通常访问一个变量涉及两种操作:获取或查看该变量存储的具体数值;设置或更新该变量所存储的具体值。例如:
int i = 20;//set
System.out.println(i);

在一行中可以定义多个变量,在同一行中还可以声明多个整型变量 int a, b, c;其中只有c被赋值而a、b并未被赋值。

变量必须先声明并在赋值之前才能访问
例如:int i; //在程序执行到此处时,并未开辟内存空间给变量i,默认情况下其未被初始化。因此在没有进行赋值操作之前无法访问该变量

12、变量的作用域:深入解析
在编程逻辑中,变量的作用域是指其有效作用的范围。简单来说,在编程语言中使用变量时,默认都是在特定的区域内具有意义的。这种区域通常由代码块的边界来限定。例如,在编程语言中使用变量时,默认都是在特定的区域内具有意义的。

基于其所在的语境进行分类:

  • 局部量(位于方法体内定义的量被称为局部量)
  • 成员量(类体内定义的量被称为成员量)
    注:不同作用域内可具相同名称;同一作用域内名称需唯一。

四、数据类型

1、数据类型的用途是什么?
程序中存在大量数据,在运行过程中这些数据都属于特定的类型。不同类型的数据占用存储空间量各有差异,在Java虚拟机(JVM)中会根据这些类型的要求来分配相应的内存容量

在Java中,数据类型分为两类:基本(或原始)数据类型与引用(或对象)数据类型。具体来说:

  • 类结构
  • 接口
  • 数组结构
    ……
    (所有Java中的类结构均属于引用数据类型)

基本数据类型主要包含四大类八种类型

4、八种基本数据类型各自占用空间大小
基本数据类型 占用空间大小(单位:字节)
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2
*计算机在任何情况下都只能识别二进制,例如:10100001101
*现代计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0)
*二进制就是数据的一种表示形式,例如:十进制表示满十进一原则,二进制表示满二进一原则
*字节(byte)
1 byte = 8 bit(1个字节 = 8个比特位)
1 kb = 1024 byte
1 mb = 1024 kb
1 gb = 1024 mb
1 tb = 1024 gb
注意:1个比特位表示一个二进制位,一个比特位就是一个1或0

在整数类型中使用的一个字节来表示Byte类型的数值信息,并占据8个比特位的空间资源。其取值范围如下:
(注意:关于Java语言中的数字类型特点,在二进制表示中存在一个符号位的概念——即最左边的一位用来区分正负数值)
其中符号位为0时代表正数、为1时代表负数。
Byte类型的数值最大可能取值是0b0111 ̃ ̃ ̃ ̃ ̃ ̃ ̃           ₁₁₁₁₁₁₁ (十进制对应的是+7到+255),而最小可能取值是-₁₂₈。
Byte类型的数值总共有₂⁵⁶种不同的组合状态

6、计算机只认识二进制,那么计算机是怎么表示现实世界当中的文字的呢?
*八种基本数据类型当中,byte、short、int、long、float、double、boolean这七种数据 类型计算机在表示的时候比较容易,因为底层都是数字,十进制的数字和二进制的数字 之间存在一种固定的转换规则。
*但是八种数据类型当中char类型表示的是现实当中的文字,文字和计算机二进制之间默认情况下是不存在任何转换关系的
*为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系。这种对照关系被称为:字符编码
*计算机最初只支持英文,最先出现的字符编码是:ASCII码
‘a’–> 97(01100001)
‘A’–> 65
‘0’–> 48
注意:
‘a’–(按照ASCII解码)–> 01100001
01100001–(按照ASCII编码)–>’a’
(编码和解码的时候采用同一套字典/对照表,不会出现乱码)
(当编码和解码的时候采用的不是同一套对照表,会出现乱码问题)
*随着计算机的发展,后来出现一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCLL码,仍然不支持中文。这种编码方式是ISO-8859-1,又被称为latin-1
*随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:GB2312 < GBK < GB18030
*支持繁体中文:大五码:big5
*后来出现了一种编码方式统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码。unicode编码方式有多种具体的实现:
UTF-8
UTF-16
UTF-32
……
*java语言源代码采用的是unicode编码方式,所以“标识符”可以用中文

关于八种数据类型的默认值
数据类型的默认值如下:

  • Byte, short, int, long 的默认值均为零
  • Float 和 double 的默认值为零点零
    其中布尔型变量的default value为false,在C语言中,默认true表示1而false表示0
    字符类型的default value为null字符
    引用类型的default value为null

注意:八种数据类型的默认值全部初始化为零值;如果成员变量没有手动赋值,则会自动被初始化;而局部变量则不会。

关于Java语言中的整数型
数据类型及其属性
byte型占用1个字节,默认取值为0,在范围-128到127之间
短整数占存两个字节,默认取值为0,在范围-32768至32767之间
整数型占用4个字节,默认取值为0,在范围-2147483648至+2147483647之间
长整数占存8个字节,默认取值为0,在范围-9223372036854775808至+9223372036854775807之间

(1)java语言当中的“整数型字面值”被默认当做int类型来处理。要让这个“整数型字面值”被当做long类型来处理的话,需要在“整数型字面值”后面添加l/L,建议使用大写的L
(2)Java语言当中的整数型字面值有三种表达方式:
第一种方式:十进制(是一种缺省默认的方式)
第二种方式:八进制(在编写八进制整数型字面值的时候需要以0开始,注意:是零,不是字母O)
第三种方式:十六进制(在编写十六进制整数型字面值的时候需要以0x开始,这里同样是零)
(3)//100L是long类型字面值
//x是long类型的变量
//不存在类型转换,直接赋值
long x = 100L;
//x变量是long类型,8个字节
//y变量是int类型,4个字节
//以下编译报错,大容量不能直接赋值给小容量
int y = x;
//大容量转换成小容量,需要进行强制类型转换
//强制类型转换需要加强制类型转换符
//加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
//所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重
int y = (int) x;
System.out.println(y);
注意:java语言当中,为了给程序员提供方便,当一个整数型字面值不超过byte,short,char类型的取值范围,编译可以通过,该字面值可以直接赋值给byte,short,char类型的变量,例如:
byte b = 50;

9、关于java语言中的char类型
(1)//定义一个char类型,起名c,同时赋值字符’a’
char c = ‘ a ‘;
System.out.println©;
//一个中文占用2个字节,char类型正好是2个字节
//所以java中的char类型变量可以存储一个中文字符
char x = ‘ 郭 ‘;
System.out.println©;
//编译错误
//ab是字符串不能使用单引号括起来
char y = ‘ ab ’
//” a ”是字符串类型
//k变量是char类型
//类型不兼容,编译错误
Char k = “ a ”;
(4)转义字符
注意:转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
char c1 = ‘n ‘;
System.out.println(c1);//输出n

char c1 = ‘\n ‘;
System.out.println(c1);//换行符

char cTab = '\t';
System.out.println("输出到控制台的字符cTab的值是制表符字符.");

//在控制台上输出“反斜杠字符”
//编写错误,以下转义字符将后面的单引号转义成普通的单引号字符
char c1 = ‘\ ‘;
System.out.println(c1);
//以下编写正确
char c1 = ‘\ ‘;
System.out.println(c1);

请在控制台输出一个普通的' '字符。
请注意:由于语法错误,在Java中无法这样直接书写。
尝试如下代码:
char c1 = ' ';
System.out.println(c1);
为了确保正确书写,请参考:
char c1 = ' '';
System.out.println(c1);

JDK内置了名为native2ascll.exe的工具程序,在其中支持的操作中包含文字转码功能

探讨浮点型数据类型的特性

注意:双倍精度与单精度数值在计算机内部使用二进制表示时都只能存储近似值

11、关于基本数据类型之间的互相转换规则
(1)八种基本数据类型当中除布尔类型之外剩下的7种类型之间都可以互相转换
(2)小容量向大容量转换,称为自动类型转换,容量从小到大排序
Byte < short < int < long < float < double
char
(3)大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用
(4)当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量
(5)byte,short,char混合运算的时候,各自先转换成int类型再做运算
(6)多种数据类型混合运算,先转换成容量最大的那种数据类型再做运算
注意:
byte b = 3;//可以编译通过,3没有超出byte类型的取值范围

Int i = 10;
Byte b = i / 3;//编译报错,编译器只检查语法,不会“运算”i / 3

五、运算符

1、算术运算符:
+ 求和
- 相减

  • 乘积
    / 商
    % 求余数(取模)

++ 自加1
– 自减1

注意:
(1)++运算符可以在变量前或后使用。
无论放在前面还是后面,
执行完毕后,
变量值都会自增1。
(2)在一个表达式中有多个运算符时,
它们有不同的优先级,
为了明确计算顺序,
可以适当添加括号来提高优先级。
int a = 10;
int b = 3;
System.out.println(a + b); // 输出结果为13
System.out.println(a - b); // 输出结果为7
System.out.println(a * b); // 输出结果为30
System.out.println(a / b); // 输出结果为3(整数除法)
系统输出的结果是正确的吗?
系统输出的结果是正确的吗?
系统输出的结果是正确的吗?
系统输出的结果是正确的吗?

2、关系运算符:

=
<
<=
==
!=
注意:
(1)一定要记住一个规则:
所有的关系运算符的运算结果都是布尔类型,
不是true就是false,不可能是其他值。
(2)在java语言中:
= : 赋值运算符
== :关系运算符,判断是否相等。
(关系运算符中如果有两个符号的话,两个符号之间不能有空格)

& 表示逻辑与(也可理解为'并且'),当两个操作数均为真时结果为真。
| 表示逻辑或(也可理解为'或者'),当至少一个操作数为真时结果为真。
! 表示逻辑非(即取反操作),这是一个单目运算符。
^ 表示逻辑异或(当两个操作数不同时为真)。
&& 是一种短路合取操作。
|| 是一种短路析取操作。

(1)逻辑运算符规定参与运算的算子必须是布尔类型的,并使运算的结果也成为布尔类型。(2)在实际应用中发现两种运算方式的结果一致,并且前者具有优先执行左侧操作的独特性。(3)同样地,在实际应用中发现两种运算方式的结果一致,并且前者具有优先执行左侧操作的独特性。(4)当采用左优先策略时,在左边操作符先执行的情况下实现这一特性。(5)在采用左优先策略时,在左边操作符先执行的情况下实现这一特性。(6)100 & true 不行,语法错误。(7) 100 & 200 不行,没有这种语法。(8) true & false 这样可以。(9) 100 > 90 & 100 > 101 --> false

4、赋值运算符:
(1)赋值运算符包括“基本赋值运算符”和“扩展赋值运算符”
*基本赋值运算符

(基本赋值运算符“=”右边优先级比较高,先执行右边的表达式,然后将表达式执行结束的结果放到左边的“盒子”当中,称为“赋值”)
*扩展的赋值运算符
+=
-=
*=
/=
%=
注意:
(1)扩展赋值运算符在编写的时候,两个符号之间不能有空格。
(2)使用扩展赋值运算符的时候,永远都不会改变运算结果类型
byte x = 100;
x += 1; ( x += 1 等同于:x = (byte)(x + 1);)
x自诞生以来是byte类型,那么x变量的类型永远都是byte。不会变,不管后面是多大的数字。
(3)i += 10 和 i = i + 10 真的是完全一样吗?
答案:不一样,只能说相似,其实本质上并不是完全相同
byte x = 100; // 100没有超出byte类型取值范围,可以直接赋值
System.out.println(x); // 100

复制代码
    分析:这个代码是否能够编译通过?
    byte x = 100;
    x += 199; // x = (byte)(x + 199);
    //早就超出byte的取值范围了,byte的取值范围:-128~127

(4)扩展操作符保持运算结果的数据类型不变,在执行任何追加或减法操作后,在初始时该变量为byte数据类型的定义下。

5、条件运算符:(三目运算符)
语法格式:
布尔表达式 ? 表达式1 : 表达式2
执行原理:
当布尔表达式的计算结果为true时, 表达式1将被执行并返回其值作为整个操作的最终结果;而当计算结果为false时, 则会执行并返回表达式2的值作为最终结果。

注意事项如下:
① 字符串连接完成后得到的结果仍是一个String类型的值
② 在一个表达式中连续出现多个加号时
默认从左至右依次处理

全部评论 (0)

还没有任何评论哟~