java程序运行机制
- 利用文本编辑器编写java源程序(.java)
- javac Welcom.java 利用编译器将源程序编译成字节码文件(.class)
- java Welcome 利用虚拟机解释执行
Welcome.java
//类名和文件名保持一致
public class Welcome{
//定义main方法
public static void main(String[] args){
System.out.println("Hello World");
}
}
常用dos命令
cd ..
dir 常看目录文件 == ls
cls 清空屏幕
起名规则:见名知意
标识符
- 标识符必须以 字母、下划线 _ 、美元符 $ 开头
- 标识符其他部分可以是 字母、下划线、数字、美元符$ 的任意组合
- 标识符大小写敏感
- 标识符不可以是java的关键字
标识符使用规范
- 表示类名:每个单词的首字母大写:如Man、GoodMan
- 表示方法和变量:第一个单词小写,从第二个单词开始首字母大写 — “驼峰原则”,如eat(),eatFood()
- java采用Unicode字符集
java关键字
变量
本质:可操作的存储空间,空间位置确定,里面放的值可变,通过变量名访问对应的存储空间,从而操纵这个存储空间的值。
注释
** idea的注释快捷键:ctrl+/ **
//这是单行注释
/*
这是
多行
注释
*/
/**
*这是文档注释,描述类作用。
*后期通过开发环境生成这个类对应的文档
*version2.0
*/
/*这是行内注释*/
public static void main(String[] args/*参数*/){
}
Java的8种基本数据类型
java是强类型语言,每个变量必须标明类型
- 整型(有符号)
byte 1B (-128~127)
short 2B
int 4B
long 8B
整数常量默认int类型 - 浮点型
float 4B 单精度
double 8B 双精度
浮点常量默认double类型
浮点数不能精确计算,若想进行不产生舍入误差的精确的数字计算,则需要使用BigDecimal类 - 字符型
char 2B
char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。
char c1 = 'A';
char c2 = '好';
char c3 = "大家" //错误: 不兼容的类型: String无法转换为char
String 字符串,不是一个基本类型,而是一个类。
String 本质上是一个字符数组
String str="Hello World"
- boolean 布尔型
布尔型在内存中1B或4B,不可以使用0或非0的整数代替 false和true,只认小写。
Java基本运算符
//Java的算数运算符
+ - * / %
//Java支持自增自减
int a=10;
a++
++a
a--
--a
//Java支持扩展运算符
+=
-=
*=
/=
%=
//Java的关系运算符,结果为boolean类型
==
!=
>
<
>=
<=
//逻辑运算符
& 逻辑与 :两个操作数为true时,结果才为true
| 逻辑或 :两个操作数有一个为true时,结果为true
&& 短路与 :只要有false则返回false
|| 短路或 :只要有true则返回true
! 非 : 取反 !false=true ; !true=false ;
^ 异或 : 相同为false ; 不同为true ;
//位运算
~ 取反
& 按位与
| 按位或
^ 按位异或
<< 左移
>> 右移
//字符串连接符
//字符串 + 其他 = 字符串
int r1=3;
int r2=4;
System.out.println(r1+r2);//7
System.out.println("resul_is:"+r1+r2); // resul_is:34
System.out.println("resul_is:"+(r1+r2)); // resul_is:7
//条件运算符 ? :
int a1=100,a2=900;
int max = a1>a2 ? a1 :a2 ;
System.out.println(max); //900
数据类型自动转换和强制转换
自动类型转换
容量小 --> 容量大
容量是指表数范围,而不是指字节数,如long是8字节、float是4字节,但long会往float转换
实线:无数据丢失的自动类型转换
虚线:可能会有精度损失的自动类型转换
将整数常量(int)直接赋值给byte/short/char等类型时,只要不超过其表数范围,则可直接自动转换为该类型。
将浮点型常量(double)赋值给float时,只要不超过float的表数范围,则可直接自动转换为float类型。
算数运算符,若两个操作数都是整数,如果有一个是long则结果为long,否则无论操作数都是byte还是都是short,其结果就是int
算数运算符,若有一个操作数是double,则结果是double
强制类型转换
double d1=3.98;
int m=(int)d1; // m=3
char c1='C';
int c2=c1+2; //c1+2的结果自动转化为int再赋值给c2
System.out.println(c2);//69
char c3=(char)c2;
System.out.println(c3);//E
//当将一种类型被强制转换为另一种类型时,并超出了目标类型的表数范围,则会被截断成一个没意义的完全不同的值。
int a3=1000;
byte b3=(byte)a3;
System.out.println(b3);//-24
//溢出错误:操作比较大的数,要留意是否出现溢出
int salary = 1000000000; //10亿,int的表数范围是正负21亿
int years = 30;
int total = salary*years;
System.out.println(total); //-64771072
long total0 = salary*years;
System.out.println(total0); //-64771072
//修改方法一
long total1 = (long)salary*years; //30000000000
System.out.println(total1);//30000000000
//修改方法二
long total2 = 1L*salary*years; //将结果自动转换为long类型
System.out.println(total2);//30000000000
键盘输入
java输入需要用到Scanner类
/**
*测试键盘输入
*/
import java.util.Scanner ;
public class TestSystemIn{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的学号和姓名,学号和姓名各占一行:");
String stuNum = scanner.nextLine();
String stuNam = scanner.nextLine();
System.out.println("你的学号是:"+stuNum);
System.out.println("你的姓名是:"+stuNam);
}
}
/**
*测试键盘输入
*/
import java.util.Scanner ;
public class TestSystemIn{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的账号名:");
String name = scanner.nextLine();
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
System.out.println("请输入你的月薪:");
double salary = scanner.nextDouble();
System.out.println("==========录入以下信息==========");
System.out.println("账户名:"+name);
System.out.println("年龄:"+age);
System.out.println("月薪:"+salary);
}
}
流程控制语句:选择
- 编程的本质:用代码表示现实的逻辑,现实中的任何逻辑都可以表示为选择和循环结构。
Java生成随机数
//[0,1)之间的随机数,double类型
double a=Math.random();
//生成[0,10)之间的随机整数
int r = (int)(Math.random()*10); //10是整数,所以double*int 的结果是double,需要强制类型转换
- if…else if…else 多分支
int age=(int)(Math.random()*100);
System.out.println(age);
if (age<15)
System.out.println("儿童");
else if (age<=24) {
System.out.println("青年");
} else if (age<=44) {
System.out.println("中年");
} else if (age<=64) {
System.out.println("中老年");
} else if (age<=84) {
System.out.println("老年");
}else
System.out.println("老寿星");
随机生成字母a-z
//随机生成a-z的字母,若字母是a,e,i,o,u则输出"元音"否则输出"辅音"
int num=(int)(Math.random()*26);
char c =(char)('a'+num);
System.out.println(c);
if(c=='a'||c=='e'||c=='i'||c=='0'||c=='u'){
System.out.println("元音");
}else {
System.out.println("辅音");
}
switch语句
switch可以接收:整数、枚举、字符串
int grade = (int)(Math.random()*3+2);//[0,4]
System.out.println(grade);
switch (grade)
{
case 1:
System.out.println("大一真好!");
break;
case 2:
System.out.println("大二不错!");
break;
case 3:
System.out.println("大三考研!");
break;
case 4:
System.out.println("大四上岸!");
break;
default:
System.out.println("入海!");
}
//季节判断
int month = (int)(Math.random()*12+1);
System.out.println(month);
switch (month){
case 1:
case 2:
case 3:
System.out.println("春季");
break;
case 4:
case 5:
case 6:
System.out.println("夏季");
break;
case 7:
case 8:
case 9:
System.out.println("秋季");
break;
default:
System.out.println("冬季");
break;
}
//字符串
String car="比亚迪";
switch (car){
case "奔驰":
System.out.println("我买了一辆奔驰车!");break;
case "奥迪":
System.out.println("我买了一辆奥迪车!");break;
case "比亚迪":
System.out.println("我买了一辆比亚迪车!");break;
default:
System.out.println("你猜我买了什么车!");break;
}
switch处理范围判断 :除法
//超市积分 [7000,10000) 苹果14一台 [5000,7000) 苹果12一台 [3000,5000) 苹果一筐 [0,3000) 棒棒糖一筐
int score=(int) (Math.random()*10000);
System.out.println(score);
switch (score/1000){
case 9:
case 8:
case 7:
System.out.println("苹果14一台");break;
case 6:
case 5:
System.out.println("苹果12一台");break;
case 4:
case 3:
System.out.println("苹果一筐");break;
default:
System.out.println("棒棒糖一筐");break;
}
流程控制语句:循环
int i =0;
while (i<=100){
System.out.println(i);
i++;
}
for(int i=0;i<=100;i++){
System.out.println(i);
}
流程控制语句:嵌套循环
//打印九九乘法表
for(int i =1;i<10;i++){
for (int j=1;j<=i;j++){
System.out.print(j