Day02笔记
课程内容
1、基本概念
2、常量
3、变量
4、运算符
一、基本概念
(一)注释
1、在代码中,用于解释说明程序的部分。
2、注释特点:
(1)编译器不会检查这部分内容的语法格式
(2)运行的时候会忽略掉这部分内容
3、分类:
单行注释:使用符号【//】,可以注释本行的内容,是//后面的内容
特点:可以嵌套使用
快捷键:ctrl + / 添加(取消)单行注释
多行注释:使用符号【/* */】,可以注释多行的内容,两个星号中间的内容
特点:可以换行注释、不能嵌套
快捷键:ctrl + shift + / 添加多行注释
ctrl + shift + 取消多行注释
文档注释:在面向对象阶段学习
快捷键:alt + shift + J 添加文档注释
注意:光标在类中方法之外的位置,是给类添加文档注释的
3、注释的作用:
(1)对程序进行解释说明:要求代码中,有30%行数都是用来写注释的
(2)对程序的思路进行描述
(3)对程序进行调试:通过注释的方式,快速定位出现错误的代码位置
代码示例
package com.offcn.demos;
/**
*
*/
public class Demo01_LineComment {
/**
*
*/
public static void main(String[] args) {
System.out.println("abc");
//System.out.println("123");
//System.out.println("456");
System.out.println("qwe");
/*/*System.out.println("HelloWorld!");
System.out.println("HelloWorld!");*/
System.out.println("HelloWorld!");
//System.out.println("HelloWorld!");//向控制台输出打印HelloWorld
}
}
(二)关键字
1、在java语言中,被赋予了特殊含义,特殊功能的英文单词
2、图示:
3、特点:
(1)全部小写
(2)自己起名字的时候,不要和关键字重名
(3)有两个保留字:goto、const,在当前版本不使用,但是以后是否使用未知。
(三)标识符
1、标识符:用于给类、接口、方法、变量、常量、枚举起名字的字符序列
2、组成:
(1)英文大小写a-zA-Z
(2)数字0-9
(3)特殊符号$ _
(4)不常用符号:除了英文以外的其他语言的字符
3、标识符的注意事项:
(1)不要和关键字重名,mychar合法、char非法
(2)数字不要开头,abc123合法、123abc非法、123非法
4、关于光标的快捷键:
光标向下一行:shift + enter
光标向上一行:ctrl + shift + enter
光标移到行首:home键
光标移到行尾:end键
按照完整的模块移动光标:ctrl + ←(→)
倒序删除:delete键
代码示例
package com.offcn.demos;
public class Demo02_name {
public static void main(String[] args) {
//int 表示一个整数,我们在后面学到,此处不用纠结
int num = 10;
int a = 10;
int number1_$ = 111;
int number1_$数字 = 111;
int $abc = 123;
int _abc = 123;
//int 1_abc = 123;
//int class = 123;
}
}
(四)Java的命名规则
1、约定俗成的规则,编译器不会检查,但是在开发中必须要遵守的规则。
2、规则:见名知意
包:全部小写,域名倒着写
例如:com.ujiuye.demos
类和接口:每个单词的首字母大写,其余其母都小写,一般是一个名词
例如:HelloWorld
方法:第一个单词的首字母小写,从第二个单词开始,首字母大写,其余字母全小写
一般是一个动词或者动宾结构
例如:eat、getMax、getName、getSum
变量:第一个单词的首字母小写,从第二个单词开始,首字母大写,其余字母全小写
一般是一个名词或者形容词
例如:name、myAge
常量:所有字母都大写,单词和单词之间,使用_分隔,一般是一个名词
例如:PI、E、MAXVALUE、SECONDSPER_MINITE
二、常量
1、常量:在程序运行过程中,其值不会发生改变的量,就是常量
2、常量按照表示形式的分类:
字面值常量:写出常量就可以知道常量的值,12, 12.34
符号常量:给常量起了一个名字,看到名字就知道常量的意义,不知道常量的值
3、常量按照数据类型分类:
基本数据类型:简单的数据
整数常量:所有整数,例如-12、15
小数常量:所有的小数,例如-12.34,100.0
字符常量:使用单引号引起来的符号,例如’a’、’1’
布尔常量:用于表示是是非非的内容,true、false
引用数据类型:基本类型组装而成的一些数据类型
字符串常量:使用双引号引起来的字符序列,例如”HelloWorld”
空常量:表示空,不指向任何数据,null
代码示例
package com.offcn.demos;
public class Demo03_Constant {
public static void main(String[] args) {
System.out.println(10);//整数字面值常量
System.out.println(3.5);//小数字面值常量
System.out.println('中');
System.out.println(' ');
System.out.println('z');
System.out.println(' ');
System.out.println('1');//字符常量需要使用''包围起来,且''中间有且仅有一个字符
System.out.println(true);
System.out.println(false);
System.out.println("abc123defg!");
//System.out.println(null);
}
}
三、变量
(一)变量的定义
1、变量:在程序运行过程中,其值会发生改变的量。
2、定义格式:
数据类型 变量名 = 变量值;
3、使用变量的原因:
在程序中,有一些代表相同意义的数据,在不断发生变化,例如年龄
定义一个不变的变量名称,表示那些不断变化的数字
在内存中,其实就是一段内存空间,空间中的数据可以不断的变化
4、图示:
代码示例
package com.offcn.demos;
public class Demo04_Variable {
public static void main(String[] args) {
//int 表示整数类型的变量
//定义格式:数据类型 变量名称 = 变量值;
int age = 18;
System.out.println(age);
age = 28;
System.out.println(age);
}
}
(二)数据类型
1、java是一个强类型语言:需要显式的说明内存空间的大小,声明变量的时候,就需要说明变量的数据类型,以此来表示内存的大小。
2、数据类型的分类:
基本数据类型:在jdk中已经定义好的一些类型,这些类型无法增加,描述的都是一些简单的数据。这些数据描述的是数值【本身】。
引用数据类型:数据描述的不是数据本身,而是在描述真正数据的【地址】。一般都是使用一些自定义的类去描述,相当于各种基本类型的组合,形成一个复杂的类型。
3、基本数据类型:四类八种
整数类型
byte 1个字节(8条电路,8个位,8bit) -128~127
short 2个字节 -2^15~2^15-1
int 4个字节 -2^31~2^31-1
long 8个字节 -2^63~2^63-1
小数类型:IEEE754标准
float 4个字节 >8个字节long类型
double 8个字节 >4个字节的float类型
字符类型:
char 2个字节 0-65535
布尔类型:
boolean 未知 truefalse
代码示例
package com.offcn.demos;
public class Demo05_BasicVariable {
public static void main(String[] args) {
/*
* byte
* short
* int
* long
*
* float
* double
*
* char
*
* boolean
*
* */
//byte num1 = 128;
//System.out.println(num1);
short num2 = 6666;
System.out.println(num2);
//int num3 = 2147483648;
//System.out.println(num3);
/*long num4 = 2147483648;
System.out.println(num4);*/
double num5 = 3.14;
System.out.println(num5);
//float num6 = 3.1;
/*
* 在同一个方法中定义变量的时候,
* 变量不允许重名
*
* */
char ch1 = ' ';
char ch2 = 'n';
char ch3 = '中';
//char ch3 = '国';
System.out.println(ch3);
boolean bo1 = true;
boolean bo2 = false;
System.out.println(bo1);
System.out.println(bo2);
}
}
(三)常量的默认值
1、java中整数类型的默认值是int类型。例如,随意定义一个整数的字面值常量,这个数据默认为int类型。但是,当有些字面值常量大于int的取值范围时,编译器会报错,说数据超出int范围,我们此时需要在数据的后面加上l(L),告诉编译器,这个数是一个long类型的数据,不是int类型
2、java默认的小数类型是double类型,double类型比float大,随意定义一个小数的字面值常量,都会被当做double类型,如果此时将默认的double类型数据存储到空间更小的float类型中,会有精度损失,此时,我们需要在数据后面加上f或者F,表示这个数字就是一个float类型的数据。
代码示例
package com.offcn.demos;
public class Demo06_DefaultType {
public static void main(String[] args) {
//int 2147483647
//int num1 = 2147483648;
/*
* java中整数类型的默认值是int类型
* 例如,随意定义一个整数的字面值常量,这个数据默认为int类型
* 但是,当有些字面值常量大于int的取值范围时,编译器会报错,说数据超出int范围,
* 我们此时需要在数据的后面加上l(L),告诉编译器,这个数是一个long类型的数据,不是int类型
* */
long num1 = 2147483648L;
//System.out.println(2147483648);
/*
* java默认的小数类型是double类型
* double类型比float大,随意定义一个小数的字面值常量,
* 都会被当做double类型,如果此时将默认的double类型数据存储到空间更小的float类型中,
* 会有精度损失
* 此时,我们需要在数据后面加上f或者F,表示这个数字就是一个float类型的数据
* */
float num3 = 3.1F;
}
}
(四)变量定义的注意事项
1、变量的作用域
作用域:变量能够起作用的范围
范围:变量定义在哪一对大括号内,就在哪一对大括号内起效
变量的定义:变量的声明,带有数据类型的部分,就属于定义变量
变量的访问:只有变量名称,没有数据类型
2、在同一个范围内,不允许出现重名的变量
3、在方法中,变量必须先赋值,后使用
4、变量的声明定义,和变量的赋值可以分开
5、可以在一行定义多个变量,格式:
数据类型 变量名称1 = 变量值1, 变量名称2 = 变量值2, 变量名称3 = 变量值3,..., 变量名称n = 变量值n;
不建议这样书写
代码示例
package com.offcn.demos;
public class Demo07_VariableNotice {
public static void main(String[] args) {
/*int a = 10;
int b = 20;
int c = 30;*/
//int a = 10, b = 20, c = 30;
/*int a, b, c;
a = 10;
b = 20;
c = 30;*/
//int num = 10;
/*int num;
num = 10;
System.out.println(num);*/
/*int num = 11;
System.out.println(num);*/
/*//1.变量的作用域
int num = 10;
//int num = 999;
{
int a = 111;
System.out.println(a);
num = 666;
System.out.println(num);//666
}
//System.out.println(a);
System.out.println(num);//666*/
}
}
(五)数据类型转换之隐式转换
1、当数据类型较小的数据存储进数据类型较大的数据时,会先将数据类型较小的数据,提升为数据类型较大的数据,再存储到数据类型较大的变量中。多个数据类型进行计算的时候,会先将较小的类型提升为较大的类型,之后再进行运算,最后存储。
2、数据类型大小的排序:
byte < short = char < int < long < float < double
3、注意事项:
byte 、short 、char、int计算的时候,会直接将数据类型提升为int,再去计算,而非较大的数据类型
int类型以及以上,在互相运算时,才会提升为较大的数据类型
代码示例
package com.offcn.demos;
public class Demo08_up {
public static void main(String[] args) {
/*int num = 3;
//隐式类型提升,隐式转换
double dou = num;
System.out.println(dou);*/
/*int num1 = 3;
byte num2 = 4;
//先将byte提升为int,int和int相加,得到int结果,再提升为double,存储进double
double dou = num1 + num2;*/
byte num1 = 4;
short num2 = 5;
//错误示范:先将byte提升为short,short和short相加,得到short结果,再提升为int,存储进int
//正确示范:先将byte和short分别直接提升为int,再进行运算得到int,最终把int结果存储到int变量中
int result = num1 + num2;
}
}
(六)数据类型转换之强制转换
1、大范围的数据类型的数据,要转成小范围数据类型的数据,就需要进行强制转换
2、转换格式:
(要转成的数据类型)待转换的数据类型
3、注意事项:
强制转换可能会产生数据精度损失,也可能不会产生
代码示例
package com.offcn.demos;
public class Demo09_Down {
public static void main(String[] args) {
int num = 129;
//(要转成的数据类型)待转换的数据类型
byte b = (byte)num;
System.out.println(b);
}
}
(七)常量优化机制
当运算时,运算的数据都是常量时,会在编译的时候直接计算结果, 将结果和所要赋值的变量的数据类型取值范围进行比较,如果在范围内,就直接赋值,如果不在范围内,就报错。如果运行变量,常量优化机制就不会起作用
代码示例
package com.offcn.demos;
public class Demo10 {
public static void main(String[] args) {
/*
* 常量优化机制
* 当运算时,运算的数据都是常量时,会在编译的时候直接计算结果,
* 将结果和所要赋值的变量的数据类型取值范围进行比较,如果在范围内,就直接赋值,
* 如果不在范围内,就报错
*
* 如果运行变量,常量优化机制就不会起作用
* */
byte b1 = 1;
byte b = 10 + 20;
System.out.println(b);
/*byte b = 127 + 1;
System.out.println(b);*/
/*byte b1 = 10;
byte b2 = 20;
byte result = b1 + b2;
System.out.println(result);*/
}
}
(八)字符类型
1、使用单引号引起来的单个字符。使用关键字char来进行声明。
2、在计算机中,所有的数据都是用数字进行表示的,字符也不例外。
3、具体的字符,存储在计算机中需要使用数字表示,数字和字符之间就存在一一对应的关系:
【编码】:将人类语言转为机器的语言
【解码】:将机器语言转为人类的语言
其中,表示人类语言和机器语言一一对应关系的表,叫做编码表
4、ASCII码表
规律:数字本身连续,从0开始,对应的值是48
大写字母本身连续,从A开始,对应的值是65
小写字母本身连续,从a开始,对应的值是97
5、世界上各个国家都有自己的编码表(字符集),就出现了统一世界各国的字符集,叫做utf-8,也叫作万国码。
6、UTF-8万国码,兼容世界各国语言,其中中文占3个字节!中国的字符集,GB2312,GBK,在GBK中中文占2个字节!
7、Java语言默认Unicode码,Unicode码使用 ‘uxxxx’ 表示,其中xxxx是四位16进制的数据
代码示例
package com.offcn.demos;
public class Demo11_Char {
public static void main(String[] args) {
char ch = 'u5475';
System.out.println(ch);
char ch1 = 97;
System.out.println(ch1);
System.out.println((char)100);
}
}
(九)字符串类型
1、使用双引号引起来的一些列的字符的组合,是一个引用数据类型,字符串的变量空间中记录的是地址值。
2、声明字符串数据类型需要使用:String
3、任何数据类型与字符串类型进行加号运算,都会做字符串的拼接操作,例如:10 + "abc"得到"10abc"
因此,数字类型转为String(字符串)类型,只需要和空字符串进行拼接操作即可
代码示例
package com.offcn.demos;
public class Demo12_String {
public static void main(String[] args) {
//System.out.println("HelloWorld!");
/*String str = "HelloWorld!";
System.out.println(str);*/
String str = "";//空串,一个字符也没有的字符串
//"abcqwe"
String str1 = "abc";
String str2 = "qwe";
String result = str1 + str2;
System.out.println(result);
//将一切基本数据类型转换为String字符串的方式:和空串进行拼接
int num1 = 10;
int num2 = 20;
System.out.println(num1 + num2);
//任何数据类型与String进行加号运算,都会得到一个新的拼接之后的字符串
String s1 = num1 + "";//10 -> "10"
System.out.println(s1 + num2);
}
}
四、运算符
(一)算数运算符
1、用于进行数学运算的符号
2、+ - * / %
3、+:加法运算符
(1)计算数学加法
(2)字符串拼接
(3)表示正数
4、/:除法运算符
(1)如果是两个整数相除,结果依然是一个整数,会直接省略小数点后的部分
(2)当参与运算的数据中有一个是小数,结果都是小数
5、%:取余(取模)运算符
(1)取余运算中,结果的符号只与第一个参数的符号有关
(2)例如:判断一个数字是否为偶数,当某个数字对2取余为0,即能够整除2,结果就是偶数,否则是奇数
代码示例
package com.offcn.demos;
public class Demo13_Math {
public static void main(String[] args) {
/*System.out.println(10 + 20);
System.out.println(10 / 2);
System.out.println(10 / 4);
System.out.println(10.0 / 3);
System.out.println(10 / 4.0);*/
System.out.println(10 % 3);
System.out.println(-10 % 3);
System.out.println(10 % -3);
System.out.println(-10 % -3);
}
}
(二)自增自减运算符
1、++自增、--自减
2、作用:让变量自身,自增或者自减1
3、运算规律:
(1)自增自减在变量的前面还是后面,作为语句的时候结果没有任何差别
(2)作为表达式的时候,当自增自减在后,先做其他事儿,再进行自增自减; 当自增自减在前,先自增自减再做其他事儿
代码示例
package com.offcn.demos;
public class Demo14_addMySelf {
public static void main(String[] args) {
/*
* 语句:结束的时候以分号结尾
* 表达式:没有分号结尾
*
* 1.自增自减在变量的前面还是后面,作为语句的时候结果没有任何差别
* 2.作为表达式的时候,当自增自减在后,先做其他事儿,再进行自增自减
* 当自增自减在前,先自增自减再做其他事儿
* */
int num = 10;
//num++;
//++num;
//--num;
//num--;
//System.out.println(num--);
System.out.println(--num);
/*System.out.println(num++);
System.out.println(num);*/
//System.out.println(++num);
}
}
(三)赋值运算符
1、用于给变量名赋值的运算符
2、分类:
(1)基本赋值运算符:=
(2)扩展赋值运算符:+=、-=、*=、/=、%=
3、基本赋值运算符:将符号右侧的值,赋给左侧的变量名称
4、扩展运算符:
将符号左右两侧的数据先进行算术运算,之后再做赋值运算
代码示例
package com.offcn.demos;
public class Demo15_assignment {
public static void main(String[] args) {
int num = 10;
//num += 5;
//num -= 3;//num = num - 3;
//num *= 2;//num = num * 2;
//num /= 3;//num = num / 3;
num %= 2;//num = num % 2;
/*
*
* num += 5;
*
* num = num + 5;
*
* 1.获取符号右侧的num值为10
* 2.将10和5相加得到15
* 3.将得到的15重新赋值回num中,将num原有的10改为15
*
* */
System.out.println(num);
}
}
(四)比较运算符
1、用于比较两个数值是否相等,比较结果是一个布尔类型的值
2、分类:
==:等于
!=:不等于
>:大于
<:小于
>=:大于等于
<=:小于等于
3、注意:运算结果一定是布尔类型!即true或者false
代码示例
package com.offcn.demos;
public class Demo16_compare {
public static void main(String[] args) {
int num1 = 10;
int num2 = 10;
int num3 = 20;
System.out.println(num1 == num2);
System.out.println(num1 != num2);
System.out.println(num1 == num3);
System.out.println(num1 != num3);
/*
* -2 <= x <= 100
* 代码中不能用这种数学上的形式去表示
* */
}
}
(五)逻辑运算符
1、用于处理逻辑运算的运算符
2、处理逻辑:逻辑值,处理结果:逻辑值(待处理的数据时布尔,处理之后结果依然是布尔)
3、& 逻辑与:将符号两侧布尔类型的结果进行合并,做与的操作
true & true 结果:true(全真为真,一假即假,所有的条件都满足的时候,才能为true,一个条件不满足就是false)
true & false 结果:false
false & true 结果:false
false & false 结果:false
4、| 逻辑或:将符号两侧的布尔类型的结果进行合并,做或运算
true | true 结果:true(一真为真,全假即假,一个条件满足就是true,所有的条件都不满足的时候,才能为false)
true | false 结果:true
false | true 结果:true
false & false 结果:false
5、&&:短路与:执行结果和逻辑与完全一样(短路与的执行效率更高)
和逻辑与有一样的执行结果,都具有“一假即假”的一票否决权,当第一个条件判断为false的时候,就不会再去判断第二个条件了。但是逻辑与&,会两个都去判断
6、||:短路或:执行逻辑和逻辑或完全一样(短路或的执行效率更高)
和短路或一样,都具有“一真即真”的一票通过权,当第一个条件判断为true时,就不会再去判断后面的条件了
7、!:逻辑非:取反,遇真为假,遇假为真
!true:false
代码示例
package com.offcn.demos;
public class Demo17_logic {
public static void main(String[] args) {
int num = 10;
System.out.println(10 > 3 & 10 <9);
System.out.println(10 > 3 | 10 <9);
System.out.println(10 > 3 && 10 <9);
System.out.println(!(10 > 3));
}
}