2.1 前言
2.1.1 标识符
可以简单的理解为一个名字。在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且遵循以下规则:
A. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符。
B. 不能以数字开头。
C. 标识符是严格区分大小写的。
D. 标识符的命名最好能反映出其作用,做到见名知意。
2.1.2 关键字
在java语言中已经被赋予特定意义的一些单词。一共有53个关键字。其中有两个保留字:const和goto。关键字不能被用作标识符!!
2.1.3 注释
Java代码的解释说明。不影响程序的运行,用于辅助读程。
//单行注释
/* 多行注释 */
/** 文档注释 */
2.1.4 变量
在JAVA中,有的数据值是不固定的,总在变,我们还需要记录这些值,我们可以把这些值理解为变量。
我们通过三个元素来描述变量:变量类型,变量名以及变量值。
int age=18; //声明int类型的变量并赋值
String tel; //声明String类型的变量
注意:
1、 变量名必须是一个有效的标识符。
2、 变量名不可以使用java关键字
3、 变量名不能重复
2.1.5 常量
在程序运行过程中一致不会改变的量成为常量。
略。。。
2.2 数据类型
2.2.1 基本类型(八种)
2.2.1.1 介绍
位Bit 字节Byte 1Bit=8byte
位Bit 字节Byte 1Bit=8byte
| 类型名称 | 字节空间 | 取值范围 |
整数型 | byte | 1 | -27到27-1 或者 -128到127 |
short | 2 | -215到215-1 | |
int | 4 | -231到231-1 | |
long | 8 | -263到263-1 | |
浮点型 | float | 4 | 单精度,对小数部分的精度要求不高 |
double | 8 | 双精度,精确的小数部分并操作值很大时 | |
字符 | char | 2 | 0到65535 |
布尔 | boolean | 1 | 真true 假false |
2.2.1.2 练习1:最大值最小值
package day0102;
public class Test1 {
public static void main(String[] args){
//=====1、整型测试开始
byte a=-128;
byte b=127;
short c=Short.MIN_VALUE;
short d=Short.MAX_VALUE;
int e=Integer.MIN_VALUE;
int f=Integer.MAX_VALUE;
long g=Long.MIN_VALUE;
long h=Long.MAX_VALUE;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);
System.out.println(h);
//=====整型测试结束
//=====浮点测试开始
float i=Float.MIN_VALUE;
float j=Float.MAX_VALUE;
double k=Double.MIN_VALUE;
double l=Double.MAX_VALUE;
System.out.println(i);
System.out.println(j);
System.out.println(k);
System.out.println(l);
//=====浮点测试结束
//=====字符测试开始
char a='a';
char b=97;
char c='b';
char d=98;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
//=====字符测试结束
}
}
2.2.1.3 练习2:输入个人信息
王海涛今年20岁,月薪20000,奉劝大家拼命学java,才能早日走向人生巅峰。
package day0201_规则;
import java.util.Scanner;
public class Test1_个人信息 {
public static void main(String[] args) {
System.out.println("姓名:");
String name= new Scanner(System.in).nextLine();
System.out.println("性別:");
String gender= new Scanner(System.in).nextLine();
System.out.println("年龄:");
int age= new Scanner(System.in).nextInt();
System.out.println("您输入的个人信息是:");
System.out.println("姓名:"+name);
System.out.println("性別:"+gender);
System.out.println("年龄:"+age);
}
}
2.2.1.4 练习3:圆形面积
圆的面积:π*r*r
圆的周长:2*π*r
package day0104;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.println("请输入圆的半径");
double r=new Scanner(System.in).nextDouble();
System.out.println(3.14*r*r);
}
}
2.2.1.5 练习4:变量交换
接收用户输入的值:假设a=1,b=2将a和b的值做交换。
package day0103;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.print("输入整数a:");
int a=new Scanner(System.in).nextInt();
System.out.print("输入整数b:");
int b=new Scanner(System.in).nextInt();
int t=a;
a=b;
b=t;
System.out.println(a);
System.out.println(b);
}
}
2.2.1 引用类型
引用类型是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组,后面讲。。。
2.3 基本类型的字面值(5条)
2.3.1 整数字面值是int类型
int a = 999999999;//错,右侧是int类型,但是超出范围
2.3.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b=127;//对
byte b=128;//错,右面已经超过byte范围是int类型的数据
double a=3.14;//对
float a=3.14;//错,右面是double,float是四字节double是八字节存不下
L –long 如:long a = 99999999999;//错,超出范围,解决方案加L
F –float 如:float a = 3.14;//错,右面是double类型,解决方案加F
D –double 如:double a=3;//错,右面是int,解决方案加D或者改成3.0
0x - 16进制
0 -8进制
\u -char类型,16进制
2.4 基本类型的类型转换
2.4.1 小到大(隐式转换)
Byte a =120;
Int b=a;//直接转
2.4.2 大到小(显式转换)
需要强制类型转换
int xx = 356;
byte y=(byte) xx;
注意:小数转成整数,小数直接舍弃
2.5.1 计算结果的数据类型,与最大类型一致
3/2 得1 ,而不是1.5,结果是int类型
3d/2 得1.5,相当于double/int,结果是double类型
2.5.2 byte,short,char三种比int小的整数,运算时会先自动转换成int
byte a=3;
byte b=4;
byte c=a+b;//错,运行时,byte会先自动转成int再运算,int+int还是int
整数运算,类似于一个中标,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米
System.out.println(300000000*60*60*24*365);
System.out.println(300000000l*60*60*24*365);
2.5.4 浮点数运算不精确
java提供了解决方案,后面就会讲到。
System.out.println(1-0.8);
System.out.println(4.35*100);
Infinity 无穷大 3.14/0
Nan not a number 0/0.0
2.6 拓展
2.6.1 什么是显示类型转换和隐式类型转换
2.6.2 char 型变量中能不能存储一个中文汉字,为什么?
char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。
package cn.tedu;
public class Test1 {
public static void main(String[] args) {
System.out.println(3/2);
System.out.println(3.0/2);
}
}
package cn.tedu.basic;
public class Test2 {
public static void main(String[] args) {
//byte short char 三种比int小的类型,运算时,先自动转化成int
byte a=1;
byte b=2;
byte c=(byte)(a+b);
short s=1;
short s1=2;
short s3=(short)(s+s1);
char c1=1;
char c2=2;
char c3=(char)(c1+c2);
System.out.println(300000000L*60*60*24*365);
System.out.println(1-0.8);//不精确0.19999999999999996
//小数运算的特殊值
System.out.println(1.5/0);//Infinity
System.out.println(0/0.0);//NaN
}
}
package cn.tedu.basic;
//测试自增
public class Test3_Zizeng {
public static void main(String[] args) {
int a=1;
System.out.println(a++);//先赋值再自增1
int b=1;
System.out.println(++b);//先自增再赋值2
System.out.println(++b+a+b++);//8 3+2+3
//自减
int c=1;
//先使用再递减
System.out.println(c--);//1
int d=1;
//先递减再使用
System.out.println(--d);//0
System.out.println(--d-d-d--);//-1-(-1)-(-1) -1+1+1
}
}
package cn.tedu.basic;
import java.util.Scanner;
//测试最大值
public class Test4_Max {
public static void main(String[] args) {
System.out.println("请输入a的值");
int a=new Scanner(System.in).nextInt();
System.out.println("请输入b的值");
int b=new Scanner(System.in).nextInt();
int max=a>b?a:b;
System.out.println("请输入c的值");
int c=new Scanner(System.in).nextInt();
max=max>c?max:c;
System.out.println("最大值是"+max);
}
}
package cn.tedu.basic;
import java.util.Scanner;
//测试平年闰年
public class Test5_Rnian {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入年号");
int year=new Scanner(System.in).nextInt();
String desc="平年";
if((year%4==0&&year%100!=0)||year%400==0) {
desc="闰年";
}else {
desc="平年";
}
System.out.println(year+"年是"+desc);
}
}
package cn.tedu.ifdemo;
import java.util.Scanner;
//测试if语法
public class Test6_If {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入价格");
double price=new Scanner(System.in).nextDouble();
double now=price;
if(price<0) {
System.out.println("输入有误,请重新输入");
return;
}
else if(price>=5000) {
now=price*0.5;
}else if(price>=2000){
now=price*0.8;
}else if(price>=1000) {
now=price*0.9;
}else {
System.out.println("不打折");
}
System.out.println("原价是"+price+",折后价是:"+now);
}
}
package cn.tedu.ifdemo;
import java.util.Scanner;
//测试if语法
public class Test7_If2 {
public static void main(String[] args) {
System.out.println("请输入成绩");
int score=new Scanner(System.in).nextInt();
//增强代码健壮性
if(score>100 || score<0){
System.out.println("输入有误,请重新输入");
return;//返回
}
String desc="优秀";
if(score>=90) {
desc="优秀";
}else if(score>=80&&score<90) {
desc="良好";
}else if(score>=70&&score<80) {
desc="中等";
}else if(score>=60&&score<70) {
desc="及格";
}else {
desc="不及格";
}
System.out.println("您的成绩是:"+score+",属于:"+desc);
}
}