Java基础语法(一)
注释:
书写注释是一个非常好的习惯,注释并不会被执行
- 单行注释 (样式编辑:File–>Settings–>Editor–>Color Scheme–>Language Defaults–>Comments–>Line comment)
//单行注释用“//”开头,后面的内容就会被注释掉,不会执行
- 多行注释 (样式编辑:File–>Settings–>Editor–>Color Scheme–>Language Defaults–>Comments–>Block comment)
//多行注释用/**/
/*
小荷才露尖尖角
早有蜻蜓立上头
*/
- 文档注释 (样式编辑:File–>Settings–>Editor–>Color Scheme–>Language Defaults–>Comments–>JavaDoc)
//JavaDoc:文档注释,用/** 注释 */
/**
*@Description 可以添加参数,可以被识别
*@Author wujie
*/
Tips:打开IDEA创建项目
1. 创建空项目(Empty Project);
2. 配置项目结构(Project Structure),设置Project选项;
3. 新建模块(Module...),此步骤和配置项目结构不分先后顺序;
4. 在模块下的src文件夹中新建Java类文件
5. 编写程序
标识符:
Java所有组成的部分都需要名字。类名、变量名以及方法名都被称为标识符。
-
关键字:系统已定义的程序单词,不能用来进行类、变量及方法的命名;
-
标识符:类名、变量名以及方法名都被称为标识符。
标识符注意点
1.所有的标识符都应该以字母(A-Z或者a-z),美元符($)或者下划线(_)开始;
2.首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或者数字的任何字符组合;
3.不能使用关键字作为类名、变量名或方法名;
4.标识符是大小写敏感的;
5.合法表示符举例:age、$salary、_value、__1_value;
6.非法标识符举例:123abc、-salary、#abc;
7.可以使用中文命名,但是一般不建议这样使用,也不建议使用拼音,不规范,显得很low。
数据类型
语言类型
- 强类型语言: 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用,Java、C、C++属于强类型语言,安全性高。
- 弱类型语言: VBScript、JavaScript
Java数据类型
-
基本类型(primitive type)
- 数值类型
- 整数类型
- byte(占一个字节):范围-128~127
- short(占两个字节):范围-32768~32767
- int(占4个字节):范围-2147483648~2147483647
- long(占8个字节):范围-9223372036854775808~9223372036854775807
- 浮点类型
- float(占4个字节)
- double(占8个字节)
- 字符类型
- char(占2个字节)
- 整数类型
- 布尔(boolean)类型
- 占1个位,true或者false(0或1)
public class HelloWorld { public static void main(String[] args) { //八大基本数据类型 //整数 int num1 = 100; //如何知道int数值范围,对应的类Integer,按住Ctrl+鼠标左键,即可通过类的源代码查看范围 byte num2 = 100; //对应的类为Byte short num3 = 100; //对应的类为Short long num4 = 100L; //Long类型要在数字后面加个L,对应的类为Long //小数:浮点数 float num5 = 50.1F; //float类型要在数字后面加个F double num6 = 3.1415926; //字符,只能输入一个字符,英文、符号或者汉字 char name = 'A'; //字符串,String不是关键字,属于类 String name1 = "中国"; //布尔值:true或false boolean flag = true; } }
- 数值类型
-
引用类型(reference type)
- 类
- String:字符串
- 接口
- 数组
- 类
拓展:什么是字节
- 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位的二进制数;
- 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示;
- 1B = 8bit;
- 字符:是指计算机中使用的字母、数字、字和符号。
思考:电脑的32位和64位的区别是什么?
32位的电脑只能使用32位的CPU和操作系统,64位电脑既可以使用32位的CPU和操作系统,也可以使用64位的。它们的寻址能力是不同的,32位电脑只能支持4GB的内存,64位电脑最高可支持128GB内存甚至更高。可支持的软件也是一样的,64位是兼容32位的。
数据类型拓展
public class HelloWorld {
public static void main(String[] args) {
//整数拓展 进制:二进制、八进制、十进制、十六进制
int i1 = 10; //十进制不需要加备注
int i2 = 010; //八进制数字前加0
int i3 = 0x10; //十六进制前加0x,分别用0~9和A~F代表1~16
int i4 = 0b10; //二进制前加0b
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//=================================================================================================
/*浮点数拓展
浮点数特征:有限的、离散的、舍入误差、大约、接近但不等于;
银行业务怎么处理?避免使用浮点数进行比较,使用数学工具类BigDecimal;
最好完全避免使用浮点数进行比较。
*/
float f = 0.1F;
double d = 1.0 / 10;
float e = 1.0F / 10;
System.out.println(f == d); //输出false,原因是float和double精度不一样
System.out.println(f == e); //输出true
float d1 = 2147483232F;
float d2 = d1 + 1;
System.out.println(d1 == d2); //输出true,原因是float类型定义值超出了该类型范围,程序自动舍弃了后面的多余部分
//=================================================================================================
/*字符拓展
浮点数特征:有限的、离散的、舍入误差、大约、接近但不等于;
银行业务怎么处理?避免使用浮点数进行比较,使用数学工具类BigDecimal;
最好完全避免使用浮点数进行比较。
*/
char c1 = 'a';
System.out.println(c1);
System.out.println((int) c1); //强制转换,输出97,所有字符本质还是数字
//字符是Unicode编码表,每个字符占2个字节,目前编码可以表示65536个字符,甚至更多。
//U0000 UFFFF
char c3 = '\u0061';
System.out.println(c3); //输出a,这种写法属于底层原理,根据输入的结果查询对应的字符
//转义字符
// \t 制表符,和Tab功能键相同
// \n 换行符,和回车键相同
System.out.println("Hello\tWorld"); //输出Hello World
//对象,需要从内存分析
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";
System.out.println(s1 == s2); //输出false
System.out.println(s3 == s4); //输出true
//new创建的对象的堆内存地址不同,尽管值相同,输出false;直接定义字符串,存在相同的常量池,只要值相同则输出true
//=================================================================================================
//布尔值拓展
boolean flag = true;
//if (flag==true){}
//if(flag){}
// 两者效果相似,Less is more!代码要精简易读
}
}
类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
低 -----------------------------------> 高
byte,short,char->int->long->float->double //long占8个字节,float占4个字节,但是浮点数优先级高于整数
运算中,不同类型的数据先转化为同一类型,然后进行运算;
public class Demo1 {
public static void main(String[] args) {
int i = 128;
//int优先级比byte,故将int赋值给type,需要强制转换(类型转换)
//优先级由高赋值给低,程序自动转换;相反,则需要强制转换
byte b = (byte) i; //输出-128,因为byte范围-128~127,赋给它的值超出范围了,导致内存溢出。
System.out.println(b);
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,需要强制转换
4.强制转换的时候可能存在内存溢出,或者精度问题
*/
System.out.println((int)23.7); //输出23
System.out.println((int)-45.89F); //输出-45
char c='a';
int d=c+1;
System.out.println(d); //输出98,因为d是int类型
System.out.println((int)d); //输出98
System.out.println((char)d); //输出b,对d进行了强制转换
//计算比较大的数的时候,注意溢出的问题
//JDK7新特性,数字之间可以用下划线分割;JDK版本是向下兼容的
int money=10_0000_0000;
int year=20;
int total1=money*year;
long total2=money*year;
long total3=money*((long)year);
System.out.println(total1); //输出-1474836480,原因内存溢出
System.out.println(total2); //输出-1474836480,在乘积转换为long类型前,乘积为int,已经内存溢出了
System.out.println(total3); //输出20000000000,先把一个数转换为long,计算结果类型也为long,故内存不会溢出
//程序规范性,整数和浮点数后面加字母时,要求使用大写
}
}