1、标识符
/*
关于java语言当中的标识符
1、 什么是标识符?
- 在java源程序当中凡是自己有权利命名的单词都为标识符。
- 标识符在Editplus当中以黑色高亮显示
- 标识符可以表示什么元素呢?
*类名
*方法名
*变量名
*常量名
*接口名
...
2、标识符的命名规则?【不按照这个规则来 编译器会报错 这是语法】
* 只能由 数字、字母、下划线_、美元符号$ 组成,不能含有其他符号
* 不能以数字开头
* 严格区分大小写
* 关键字不能做标识符
* 理论上无长度限制 但是最好不要过长
3、标识符的命名规范?【只是一种规范,不属于语法,不遵守编译器不会报错】
* 最好见名知意
public class UserService{
public void (String username,String Password) {
}
}
* 遵守驼峰命名方法
SystemService
UserService
* 类名、接口名: 首字母大写,后面每个单词首字母大写
* 变量名、方法名:首字母小写,后面每个单词首字母大写
* 常量名:全部大写
*/
public class IdentifireTest01 //IdentifierTest01 是一个类名,名字可以修改
// main 是一个方法名
{ public static void main(String[] args){ //args 是一个变量名
}
}
2、字面值
/*
关于字面值:
* 字面值:
-10、100 属于整数型字面值
-3.14 属于浮点型字面值
-"abc" " 中国人" 输入字符串型字面值
-'a' '人'属于字符型字面值
-true、false 属于布尔型字面值
* 字面值就是数据。
注意:
java语言中所有字符串型字面值必须用双引号括起来
java语言中所有字符型字面值必须用单引号括起来
*/
public class ConstTest01
{
public static void main(String[] args){
System.out.println(10);
System.out.println(3.14);
System.out.println("中国人");
System.out.println('人');
// System.out.println('中国'); 报错:编译报错,因为单引号中只能存放单个字符
}
}
3、变量
/*
变量
变量本质上来说是内存中的一块空间,这块空间有 数据类型、变量名、字面值【数据】组成。
*/
public class VarTest01{
public static void main(String[] args){
int i=10;
System.out.println(i);
//int a,b,c=300; 报错:a和b尚未初始化(赋值) c赋值300
//System.out.println(a);
//System.out.println(b);
//System.out.println(c);
}
}
/*
*/
public class VarTest01{
public static void main(String[] args){
int i=100;
i=80;
System.out.println(i);
// 报错: 在同一个作用域当中,变量名不能重名(因为i=100已经占用了内存空间了)但是变量可以重新赋值。
//int i =90;
//System.out.println(i);
}
}
4、变量的作用域(成员变量 局部变量)
/*
什么是变量的作用域?
* 出了大括号就不认识了
*/
public class VarTest01{
// 注意这里的static不能省掉
static int k=90; //相当于全局变量 (成员变量)
public static void main(String[] args){
// 变量i的作用域是main方法
// 在整个main方法中是有效的可见的
int i=100; // 相当于局部变量 只能在main方法中应用 在dosome方法中不能用
System.out.println(k); //可以访问k
// 以下会编写一个for循环语句
//for (int a=0;a<10 ;a++ ) // a变量的作用域是整个for循环 for循环结束后a变量内存就被释放了
//{
//}
//System.out.println(a); // 报错!!! 无法访问a变量
int j; // 相当于全局变量
for (j=0;j<10 ;j++ )
{
}
System.out.println(j);
}
public static void dosome(String[] args){
//报错!!!
// 这里已经无法访问main方法中的i变量
//System.out.println(i);
System.out.println(k); //可以访问k
}
}
5、数据类型
/*
数据类型的作用?
程序当中有很多数据,每一个数据都有相关的类型,不同数据类型占用的空间大小不同
数据类型的作用是指导JVM在运行过程中给该数据分配相应的内存空间
基本数据类型:(包括四大类八小种)
整数型:
int 4字节
long 8
short 2
byte 1 取值范围【-128~127】
浮点型:
float 4
double 8
布尔型:
boolean 1 取值范围【true,false】
字符型: (表示文字)
char 2 取值范围【0~65535】
字符串"abc"不属于基本数据类型,属于引用数据类型,字符属于基本数据类型
*字符串用双引号""
*字符用单引号''
什么是字节编码?
为了让计算机能够表示现实世界当中的文字,我们需要人为的干涉,需要人负责提前制定好"文字"
和"二进制"之间的对照关系,这种对照关系被称为: 字符编码。
最早的字符编码:ASCII码
'a'--->97
'A'--->65
'0'--->48
java语言采用的是哪一种编码方式呢?
-java语言源代码采用的是unicode编码方式,所以"标识符"可以是中文。
public class 学生{
}
现在在实际开发中,一般使用UTF-8编码方式比较多。【统一编码方式】
*/
数据类型的详细介绍:
char类型
public class DataTypeTest
{
public static void main(String[] args){
char a='a';
System.out.println(a);
// 定义一个中文字符一个中文占用2个字节 char刚好2个字节
// 当为2个中文时就会报错
char b='国';
System.out.println(b);
//ab为字符串不能用单引号 报错!!!
//char c='ab';
//System.out.println(c);
//为双引号时也会报错类型类型不兼容
//char d="a";
//System.out.println(d);
}
}
转义字符
/*
关于java语言中的char的类型:
转义字符 \
\n 换行符
\t 制表符
\' 普通的单引号
\\ 普通的反斜杠
\" 普通的双引号
转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
如:System.out.println("\"hello world!\""); \会将左右两边的引号转换成普通"
*/
public class DataTypeTest
{
public static void main(String[] args){
// * 普通的字符n
char a='n';
System.out.println(a);
// * \n 换行符
System.out.println("hello");
System.out.println("world!");
// 注意: print和println的区别: print指输出后不换行 println指输出后换行
System.out.print("hello");
System.out.println("world!");
// 编译错误 报错
//System.out.println(""hello world!"");
System.out.println("\"hello world!\"");
// * \t 制表符(相当于tab)
// 强调:制表符和空格不同,他们的ASCII码不同
char i='\t';
System.out.print("A");
System.out.print(i);
System.out.println("B");
// * 要求在控制台输出反斜杠字符
//char c='\'; 报错 反斜杠将后面的'进行转义了 而要是用c变量的话需要完整的''因此报错
//System.out.println(c);
char c='\\'; // 第一个反斜杠将后面的斜杠进行转义成\
System.out.println(c);
}
}
关于JDK自带的native2ascii.exe命令,可以将文字转换成unicode编码形式如下:
怎么解码呢?
整数型
关于java语言当中的整数型:
数据类型 占用空间大小 默认值 取值范围
----------------------------------------------------------
bytes 1 0 【-128~127】
short 2 0 【-32768~32767】
int 4 0 【-2147483648~2147483647】
long 8 0L
1、 java语言当中的“整数型字面值”被默认当做int类型来处理,要想让这个“整数型字面值”被当做long类型
来处理的话,需要在“整数型字面值”后面加上l或L,建议使用L。
(如 long x=123; 123先被JVM当做整数型字面值来进行判断取值范围等,然后赋值给long型)2、java语言当中的整数型字面值有三种表示方式:
第一种方式:十进制【是一种缺省默认的方式】
第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest
{
public static void main(String[] args){
int a=10;
int b=010;
int c=0x10;
System.out.println(a); //10
System.out.println(b); //8
System.out.println(c); //16
//由上述1文字叙述可知 123这个整数的字面值为int类型
//i变量声明的时候也是int类型
//int类型的123赋值给int类型的变量i,因此不存在类型转换
int i=123;
System.out.println(i);
// 错误: 过大的整数: 2147483648
// 因为2147483648首先被JVM当成int类型 但是int类型的取值范围为2147483647因此进行了报错
//long z=2147483648;
//System.out.println(z);// 将字面值变成long型(long型的取值范围大)
long z=2147483648L;
System.out.println(z);
}
}
强制转换类型:
强制类型转换原理: 加上强制类型转换符“(转换类型)”后编译能通过 但运行阶段可能损失精度。
原始数据(如:long类型):
00000000 00000000 00000000 00000000 00000000 00000000 00000000 01010100
强转之后的数据(如强转成int类型):
00000000 00000000 00000000 01010100
long k=27564123L;
int e=(int)k;
System.out.println(e);
byte特殊性
public class DataTypeTest
{
public static void main(String[] args){
分析以下数据是否能够编译成功?
依据目前所学以下数据编译是不成功的
理由:50是int类型的字面值,a是byte类型的变量,显然是大容量int转换成小容量byte
大容量转换成小容量需要添加强制类型转换符 以下程序没有添加转换符 所以报错
注意: 但是程序没有报错 以下代码编译通过了 这说明:在java语言中,当一个整数型字面值
没有超过byte类型的取值范围的话 该字面值可以直接赋值给byte类型的变量
byte a=50;
byte b=127;
byte c=128;// 超出了byte类型的取值范围 报错
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
浮点型类型
/*
关于浮点型类型:
float 单精度【4个字节】
double 双精度【8个字节】
在java语言中,所有的浮点型字面值如【3.0】默认当成double类型来进行处理
要想该字面值当做float类型来处理 需要在字面值后面加上F或f
注意:double和float在计算机内部二进制存储的时候存储的都是近似值。
如10÷3=3.333333333333...*/
public class DataTypeTest
{
public static void main(String[] args){
// 字面值3.0默认类型为double类型 无转换
double i=3.0;
System.out.println(i);//字面值5.0默认为double类型 double类型比float类型大 因此大转小 报错
//(没有添加强制转换符 添加的话也容易丢失精度)
//float a =5.0;
//System.out.println(a);float b =5.1F;
System.out.println(b);
}
}
布尔数据类型
/*
关于布尔型数据类型:
boolean*/
public class DataTypeTest
{
public static void main(String[] args){
// java当中 0和1不兼容 报错
//boolean i =1;boolean loginuser = true;
if (loginuser)
{
System.out.println("恭喜你 登录成功!");
}
else{
System.out.println("用户登录失败!");
}}
}
基本数据类型的相互转换
/*
关于基本数据类型之间的转换:
转换规则:
1、八种基本数据类型当中除布尔型类型之外剩余的7种数据类型之间可以进行相互转换
2、小容量向大容量转换称为自动类型转换,容量从小到大排序:
byte<short<int<long<float<double<char
注:
任何浮点型不管占用多少个字节 都比整数型容量大
char和short可表示的种类数量相同,但是char可以取更大的正整数
3、大容量转换为小容量称为强制类型转换,需要加强制类型转换符,程序才能
编译通过,但是在运行阶段可能会损失精度,所以谨慎使用
4、当整数字面值没有超过byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量
5、byte,short,char混合运算的时候,各自先转换成int类型再做运算byte a=5;
short b=10;
int k =15;(尽量不要让运算法则混杂进来 尽量不写成 int x = a+b)
6、多种数据类型混合运算,先转换成容量最大的那种类型再做运算*/
算术运算符
/*
关于java编程运算符中: 算术运算符
+ 求和
- 相减
* 乘积
/ 商
% 求余数【取模】++ 自加1
-- 自减1注意:一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。
没有必要去专门记忆运算符的优先级*/
public class DataTypeTest
{
public static void main(String[] args){
int i =3;
int a =6;
System.out.println(i+a);
// 以下为++为例 (--相同)
// 关于++运算符【自加1】
//int b =9;
//++运算符可以出现在变量名之后【单目运算符】
//b++;
//System.out.println(b); //10
// ++运算符可以出现在变量名之前
//++b;
//System.out.println(b); //10
int c =100;
int d =++c;
System.out.println(c); //101 ++c了所以100+1
System.out.println(d); //101 同理++c为101int e =300;
int f =e++;
System.out.println(e); //301 e++了所以300+1
System.out.println(f); //300 int f =e++ 先赋值e 后作加减 所以先将e=300 赋值给f
}
}
关系运算符
/*
关于java编程运算符中: 关系运算符!= 不等于
关系运算符的运行结果一定是布尔类型:true/false
*/public class DataTypeTest
{
public static void main(String[] args){
int a =10;
int b =10;
System.out.println(a!=b); //false
}
}
逻辑运算符
/*
关于java编程运算符中: 逻辑运算符
& 逻辑与【并且】(两边的算子都为true 结果才为true)
| 逻辑或【或者】(两边的算子只要有一个为true 结果就为true)
! 逻辑非(取反 !false就是true !true就是false )
^ 逻辑异或 (两边的算子只要不一样 结果就为true)
&& 短路与
|| 短路或短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象
短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象
*/public class DataTypeTest
{
public static void main(String[] args){
System.out.println(6>5&6>3); //true 运算级:先算6>5 6>3 再比较
System.out.println(6>5&6>8); //false
System.out.println(6>5|6>9); //true
System.out.println(6>8&6>10); //false
System.out.println(!false); //true
System.out.println(false^false); //false
System.out.println(false^true); //true
System.out.println("======================");
// 逻辑与和短路与
int x=10;
int y =8;
// 逻辑与
System.out.println(x<y & ++x<y);
System.out.println(x); //11// 短路与
//x<y结果是false,整个表达式结果已经确定是false
// 所以后面的++x<y表达式不再进行,这种现象称为短路现象
System.out.println(x<y && ++x<y);
System.out.println(x); //10}
}从某个角度讲短路与更为智能。由于后面的表达式可能不执行,所以执行效率较高。
字符串连接运算符
/* 字符串连接规则:
数字 + 数字 ---> 数字【求和】
数字 + "字符串" ---> "字符串"【字符串连接】*/
public class A
{
public static void main(String[] args){
System.out.println(10+30); //40
System.out.println("10+30"); // 10+30
System.out.println(10+"30"); //1030
System.out.println(10+20+"30"); //3030 自左向右的顺序依次计算
System.out.println(10+(20+"30"));//20+"30"变成字符串"2030" 然后字符串"2030"再与数字10相加 结果102030
int a=10;
int b=30;
// 怎么输出10+30=40呢?
// 第一种方法
System.out.println("10+30=40"); //10+30=40
// 第二种方法【要求动态方法 就是不固定变量a和b】
System.out.println("10+30="+a+b);
//"10+30=1030" 先拼接"10+30="+a (字符串+数字 直接拼接)即"10+30=10" 再"10+30=10"+b 即"10+30=1030"
System.out.println("10+30="+(a+b)); //10+30=40
System.out.println("a+30="+(a+b)); // a+30=40
// 问: 怎么把a和b写活呢?
System.out.println(a+"+"+b+"="+(a+b));//拼接过程:a+"+",a+"+"+b,a+"+"+b+"=",a+"+"+b+"="+(a+b)System.out.println("=============================");
/*
引用类型String
String是SUN在javaSE当中提供的字符串类型
String.class字节码文件String是引用数据类型,s是变量名,"abc"是String类型的字面值
String s="abc";
注意:String ss=10; 编译错误 类型不兼容
*/
String username="junker";
//System.out.println("登录成功 欢迎username回来!");//登录成功 欢迎username回来!
System.out.println("登录成功 欢迎"+username+"回来!");//登录成功 欢迎junker回来!}
}
三元运算符
/*
三元运算符/三目运算符/条件运算符1、语法规则:
布尔表达式 ? 表达式1:表达式2
2、三元运算符的执行原理:
当布尔表达式的结果为true的时候,选择表达式1作为整个表达式的执行结果
当布尔表达式的结果为false的时候,选择表达式2作为整个表达式的执行结果
*/public class A
{
public static void main(String[] args){
// 布尔类型的变量
boolean sex =true;
// 报错 不是一个语句
//sex ? '男':'女';//正确过程如下:
char c = sex ? '男':'女';
System.out.println(c); // 男
// 报错 不兼容类型: "男" 为String类型 '女' 为char类型
//char d =sex ? "男":'女';
//System.out.println(d);sex =false; // 给boolean变量重新赋值
// 也可以都写成String类型
String i = sex ? "男":"女";
System.out.println(i); // 女
}
}
运用三元运算符:
接收用户输入的3个整数 并将它们的最大值作为结果输出
public class A
{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入第一个整数:");
int a =s.nextInt();
System.out.print("请输入第二个整数:");
int b =s.nextInt();
System.out.print("请输入第三个整数:");
int c =s.nextInt();
int max =a>b?a:b;
max =max>c?max:c;
System.out.println("最大值为:"+max);
}
}