Java 从这里启航
常见的 DOS 命令
首先进入运行窗口 (快捷键 win + R)
查看目录下的内容
dir: 查看目录下容
文件夹操作
cd: 进入一个文件夹
md: 创建一个文件夹
cd…: 返回上级文件夹
echo > : 写入文件
type: 查询文件内容
echo >>: 文本追加
del: 文本删除
rd: 文件夹删除
cls: 清空屏幕
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的一系列有序的指令集合。
Java 语言特点
面向对象: 重点放在数据(对象)和对象的接口上进行的一种程序设计技术
简单性: Java 剔除了 C++当中许多很少使用,难以理解,容易混淆的特性
跨平台: 一次编译,到处运行,跨操作系统、服务器运行
开源: 免费,可以对源代码进行修改
Java 的术语
JVM (Java Virtual Machine) Java 的虚拟机:
使用软件在不同操作系统中,模拟相同的环境
JRE (Java Runtime Environment) Java 的运行环境:
JVM + 解释器
JDK (Java Development Kit) Java 的开发工具:
JRE + 类库 + 开发工具包(编译器+调试工具)
JDK 测试安装成功
JDK 环境变量配置成功
Java的第一个程序
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
Hello World
Java 的执行机制
先将源文件(.java)编译成字节码文件(.class), 再将字节码文件进行解释执行
Java的设计模式: “Run Once Run Anywhere“
书写格式
public class HelloWorld{
// public: Java语言访问权限关键字
// class: Java语言声明一个类的关键字
// HelloWorld: 表示Java语言的一个文件名,这个名称必须与文件名相同
// 当前这个类的作用范围
public static void main(String[] args){
// {}:当前代码的作用范围
// static: Java语言的关键字,表示静态的
// void: Java语言的关键字,表示无返回任何数据类型的值
// main: 方法名称,表示Java程序的入口
System.out.println("Hello");
System.out.println("World");
}
}
可视化Java代码编辑器-Eclipse
创建一个.java文件并运行
Java 的关键字
被Java赋予了特定含义的单词
Java 的标识符
标识符的命名规则
1. 组成规则
英文大小写字母[a-z][A-Z]、数字字符[0-9]、特殊符号 $ _
2. 注意事项
不能以数字开头、不能使用java关键字、区分大小写
标识符的规范
包名 package name
包名全部小写,一般是公司的域名倒着写 例: com.jf.java
类名 class name
首字母大写,多个单词连接的类名,使用驼峰法书写 例: Demo TestDemo
public class Test2 {
// 命名的名称需要见名知意
public static final int MAX_NUMBER = 100; //常量名需全部大写
public static void main(String[] args) {
int numOne = 1; //驼峰式写法
int numTwo = 2;
System.out.print(numOne+numTwo);
}
public int getNum() {
//方法名写法
return 0;
}
}
Java的编程基础
Java 的基本数据类型
public class HelloWorld {
int a = 20; //成员变量
public static void main(String[] args) {
int num = 10; //局部变量
/*
* 八种基本数据类型
* 数据类型
*/
byte by = 10; //占用1个字符,取值范围-128~127
short sh = 20; //占用2个字符,取值范围-32768~32767
int in = 30; //占用4个字符
long lon = 40; //占用8个字符
float fl = 1.1F; //占用4个字符
double dou = 1.5D; //占用8个字符
char ch = 'a'; //占用2个字符,取值范围0~65536
boolean boo = true; //占用字节不确定
/*
* 定义变量的格式
* 数据类型 变量名; 声明一个变量
* 变量名 = 值; 赋值一个变量
*
* 上述都是声明 + 赋值
*/
int a;
a = 20; // 分步操作
/*
* ASCII码的输出
*/
char c = 97;
System.out.println(c); //输出: a
}
}
基本数据类型转换
public class Test1 {
public static void main(String[] args) {
// 容量小的数据类型向容量大的直接转换
// 反之,需要进行强制转换,但注意会出现精度的丢失或数据的溢出
byte b1 = 1;
short b2 = b1; // 自然转换
short b3 = 1;
byte b4 = (byte) b3; // 强制转换
char ch = '陈';
int result = ch; // 转换成字节形式输出
System.out.println(result); // 38472
/*
* 下面的三个转换是由整数转换成浮点数
* 可能会存在丢失精度
*
* 如果用于表示货币值,不建议使用float或double
*/
int num1 = 30;
float fl1 = num1;
System.out.println(fl1); //近似值
int num2 = 30;
double dou1 = num2;
System.out.println(dou1); //近似值
long num3 = 30;
double dou2 = num3;
System.out.println(dou2); //近似值
// 面试题:
short s1 = 10;
s1 = (short) (s1 + 1);
// 需要强制转换,因为short进行运算的时候会转换成int类型
// byte、short、int都存在这个问题
System.out.println(s1);
}
}
转义字符的演示
public class Test2 {
public static void main(String[] args) {
// 转义字符:用于转换符号的字符
System.out.println("转行");
System.out.print("转义字符,我是一个回车符\n");
System.out.println("\t我是一个制表符"); //我是可以自适应的
System.out.println("\\我是一个斜杠,前面那位是转义我的");
System.out.println("\"我是一个双引号,前面那位是转义我的");
System.out.println("\'我是一个单引号,前面那位是转义我的");
}
}
转行
转义字符,我是一个换行符
我是一个制表符
\我是一个斜杠,前面那位是转义我的
"我是一个引号,前面那位是转义我的'
运算符
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
int a = 5;
int b = 2;
System.out.printf("加法运算: a + b = %d ",a+b);
System.out.printf("减法运算: a - b = %d ",a-b);
System.out.printf("乘法运算: a * b = %d ",a*b);
System.out.printf("除法运算: a / b = %d ",a/b);
System.out.printf("取模运算: %d ", a%b);
System.out.println("----换行----");
// 先自增
int num1 = a++;
System.out.printf("我是先赋值,后自增: %d ",num1); // a = 5
System.out.printf("自增后 a 的值: %d ",a); // a = 6
// 后自增
int num2 = ++b;
System.out.printf("我是先自增,后赋值: %d ",num2); // b = 3
System.out.printf("自增后 b 的值: %d ",b); // b = 3
System.out.println("----换行----");
/*
* 赋值运算符
*/
// a += 1;
// a -= 1;
// a *= 2;
// a /= 2;
// a %= 2;
// 面试题:
short s = 10;
s += 1;
System.out.printf("我是 short 类型下使用赋值运算符计算的结果: %d",s);
// 我是不用进行强制进行转换
System.out.println("----换行----");
/*
* 关系运算符
*/
System.out.printf("a=%d,b=%d ",a,b);
System.out.printf("a==b: %b ",a==b);
System.out.printf("a!=b: %b ",a!=b);
System.out.printf("a>b: %b ",a>b);
System.out.printf("a<b: %b ",a<b);
System.out.printf("a>=b: %b ",a>=b);
System.out.printf("a<=b: %b ",a<=b);
System.out.println("----换行----");
// 创建一个键盘输入的工具
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数值: ");
int num3 = input.nextInt(); // 系统获取刚才输入的整数值
System.out.printf("整数值为: %d",num3);
input.close();
}
}
加法运算: a + b = 7 减法运算: a - b = 3 乘法运算: a * b = 10 除法运算: a / b = 2 取模运算: 1 ----换行----
我是先赋值,后自增: 5 自增后 a 的值: 6 我是先自增,后赋值: 3 自增后 b 的值: 3 ----换行----
我是 short 类型下使用赋值运算符计算的结果: 11----换行----
a=6,b=3 a==b: false a!=b: true a>b: true a<b: false a>=b: true a<=b: false ----换行----
请输入一个整数值: 4
整数值为: 4
逻辑运算符
public class Test4 {
public static void main(String[] args) {
/*
* 逻辑运算符
*/
boolean a = true;
boolean b = false;
// 与运算:分别计算表达式两边的结果再作与运算,两边同时为true的时候,结果为true
System.out.printf("a&b is %b\n", a&b);
// 或运算:分别计算表达式两边的结果再作与运算,两边只要有一个为true,结果为true
System.out.printf("a|b is %b\n", a|b);
// 异或运算:分别计算表达式两边的结果再作与运算,两边结果相异为true,相同为false
System.out.printf("a^b is %b\n", a^b);
// 非运算:
System.out.printf("!a is %b\n", !a);
// 短路与:
System.out.printf("a&&b is %b\n", a&&b);
// 短路或:
System.out.printf("a||b is %b\n", a||b);
/* 面试题:
* & vs &&:
* &:在逻辑运算时分别计算表达式两边的结果,再作&运算,在做位运算时&表示按位与
* &&短路与运算,先计算左边的表达式,如果结果是false,那么不用计算右边表达式,直接返回false,
* 如果左边的表达式结果是true,再计算右边的表达式,如果右边的表达式为true,结果为true,否则为false
* | 和 ||的原理同上。
* 所以短路与 或 短路或的计算效率更高,建议使用。
*/
// 面试题:以最快的速度计算8*4结果?
System.out.println(8<<2);
}
}
a&b is false
a|b is true
a^b is true
!a is false
a&&b is false
a||b is true
8*4 结果是 32
位运算
public class Test5 {
public static void main(String[] args) {
/*
* 位运算
*/
// 左移运算:位移数作为2次幂与操作数相乘
System.out.println(8<<2);
// 右移运算:操作数除以位移数的2次幂
System.out.println(8>>2);
// 通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数"); // 32
int a = input.nextInt();
System.out.println("请输入第二个数"); // 2
int b = input.nextInt();
// (1)通过第三个变量来交换
int c = a;
a = b;
b = c;
System.out.println("a="+a+",b="+b);
// (2)不通过第三个变量如何交换两个数?
// 1.通过表达式
a = a+b-(b=a);
// 2.通过+-计算
a=a+b;
b=a-b;
a=a-b;
// 3.通过异或,两个数交换位置最快的方法
a = a^b;
b = a^b;
a = a^b;
input.close();
}
}
三目运算符
/*
* 三目运算符
*/
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
System.out.println("请输入一个成绩: ");
Scanner input = new Scanner(System.in);
int score = input.nextInt();
// boolean result = score>=60?true:false;
// String表示一个字符串类型,不是一个基本数据类型
String result = score >= 60? "及格":"不及格";
System.out.println(result);
input.close();
}
}
if 条件判断语句
public class Test7 {
public static void main(String[] args) {
// 1、输入一个数字,这个数字转码可以为一个字母,判断是大写字母还是小写字母,输出提示信息。
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字,范围是65-122:"); // 65是A,97是a,122是z
int c = input.nextInt();
if(c>=65 && c<=90){
System.out.println("您输入的是一个大写字母"+(char)c);
}else {
System.out.println("您输入的是一个小写字母"+(char)c);
}
// 2、写一个程序,判断某一年是否为闰年是闰年否则是平年
// 被 4 整除但不能被 100 整除能被 400 整除
System.out.println("请输入年份:");
int year = input.nextInt();
if((year%4==0 && year%100!=0) || year%400==0){
System.out.println("是闰年");
}else{
System.out.println("平年");
}
// 3、给出一个百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
// 90分以上输出’A’,80~89分输出’B’,70~79分输出’C’,
// 60~69分输出’D’,60分以下输出‘E’
System.out.println("输入一个成绩:");
int score = input.nextInt();
if(score>=90){
System.out.println("A");
}else if(score<90 && score >=80){
System.out.println("B");
}else if(score<80 && score >=70){
System.out.println("C");
}else if(score<70 && score >=60){
System.out.println("D");
}else if(score<60){
System.out.println("E");
}
input.close();
}
}
switch 分支语句
public class Test8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("今天是星期几?");
int day = input.nextInt();
/*
* switch括号内的表达式的返回值必须是int/char/short/byte,1.7后支持String
* 每一个case子句必须是唯一的常量值,需要添加break,否则将继续往下执行。
* default语句可以省略
*/
switch(day){
case 1:
System.out.println("星期一");
System.out.println("周一比较堵,请慎重选择出行方式(1公车,2地铁)");
int method = input.nextInt();
if(method==1){
System.out.println("公交出行");
}else{
System.out.println("地铁出行");
}
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("地球上不适合你,请回火星吧");
break;
}
input.close();
}
}
switch分支语句小练习
/*
* switch分支语句小练习
*/
import java.util.Scanner;
public class Test9 {
// switch分支语句
// 直接用JDK1.7的字符串条件判断,确定两个数是执行加、减、乘、除操作。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数");
int num1 = input.nextInt();
System.out.println("请输入第二个数");
int num2 = input.nextInt();
System.out.println("请输入操作符(+,-,*,/)");
String option = input.next(); // 输入的是字符串
switch(option){
case "+":
int i = 10;
System.out.println("num1+num2="+(num1+num2));
System.out.println("i="+i);
break;
case "-":
i = 20;
System.out.println("num1-num2="+(num1-num2));
System.out.println("i="+i);
break;
case "*":
System.out.println("num1*num2="+(num1*num2));
break;
case "/":
System.out.println("num1/num2="+(num1/num2));
break;
default:
System.out.println("输入的操作符有误");
break;
}
input.close();
}
}
- 在实现分支判断时,匹配成功率高的判断放在前面,可以提高效率
- 在表达式中判断,我们尽量使用确定的值去跟不确定的值进行判断
while 循环语句的小练习
//1、计算1-100之间所有整数之和
public class Test10{
public static void main(String[] args){
int num = 0; //计算总数
int i = 1; //增量
while(i<=100){
num+=i;
i++;
}
System.out.println(num);
// 2、计算 10 的阶乘
int i2 = 1;
int num2 = 1;
while(i2<=10){
num *= i;
i2++;
}
System.out.printf("10 的阶乘的结果为: %d\n", num2);
// 3、输出1~3中奇数,偶数和3的倍数
int i3=1;//增量
while(i3<=3){
if(i3%2==0){
System.out.println("偶数:"+i3);
}else{
System.out.println("奇数:"+i3);
}
if(i3%3==0){
System.out.println("3的倍数:"+i3);
}
i3++;
}
}
1-100之间所有整数之和为: 5050
10 的阶乘的结果为: 1
奇数:1
偶数:2
奇数:3
3的倍数:3
while循环:先判断,再执行,有可能执行0次
do…while 循环语句的小练习
public class Test11 {
public static void main(String[] args){
System.out.println("逆序输出3~0的结果:");
// 1、逆序输出3~0
int i = 3;
do{
//循环体
System.out.println(i);
i--;
}while(i>=0);//循环条件
System.out.println("阶乘求和 1!+2!+...+10!的结果:");
// 2、Java阶乘求和 1!+2!+...+10!
int num = 0;//记录总和
int i2 = 1;
do{
int j = 1;
int jc = 1;//求阶乘的和
while(j<=i){
jc *=j;
j++;
}
num+=jc;
i2++;
}while(i2<=10);
System.out.println(num);
}
}
逆序输出3~0的结果:
3
2
1
0
阶乘求和 1!+2!+...+10!的结果:
10
do while循环:先执行,再判断,最少执行一次
for 循环的六种写法
public class Test12{
public static void main(String[] args){
System.out.println("标准写法");
//1、标准写法
for(int i=0;i<=3;i++){
if(i==2){
continue; //跳过当次循环,进入下次循环
}
System