1、了解Java
Java是一门编程语言
1.1 Java三大平台体系
JavaSE ( J2SE ):
标准版:各个应用平台的基础
JavaEE ( J2EE ):
企业版:为企业的环境进行开发的
JavaME ( J2ME ):
微型版:致力于嵌入式开发
1.2 java是跨平台的
Java源代码 -> 编译 -> 字节码文件 -> 运行 -> 安装到不同的系统中
2、jdk开发环境的搭建
2.1几个概念
JVM:Java虚拟机
jre:Java运行环境
jdk:Java开发工具
jdk包含了jvm和jre
2.2jdk安装与环境配置
安装:傻瓜似安装
配置变量:
jdk配置: 打开我的电脑 -> 右击空白处 -> 点击属性 -> 点击高级系统设置 -> 点击环境变量 -> 在系统变量中点击新建 -> 变量名输入:JAVA_HOME(可自定义命名) -> 变量值输入:C:\Program Files\Java\jdk1.8.0_241(jdk安装路径,此路径为默认路径) -> 点击确定 -> 找到变量名为Path选择点击编辑 -> 点击新建将 %JAVA_HOME%\bin 添加进去 -> 一路点击确定
jre配置: 打开我的电脑 -> 右击空白处 -> 点击属性 -> 点击高级系统设置 -> 点击环境变量 -> 在系统变量中点击新建 -> 变量名输入:JRE_HOME(可自定义命名) -> 变量值输入:C:\Program Files\Java\jdk1.8.0_241\jre(jre路径,此路径为默认路径) -> 点击确定 -> 找到变量名为Path选择点击编辑 -> 点击新建将 %JRE_HOME%\bin 添加进去 -> 一路点击确定
配置好后验证:
win+r打开终端 -> cmd -> 输入 java -version(查看jdk版本) -> 输入 java -> 输入javac
3、Dos命令
win + r -> cmd 打开命令终端
dir : 展示当前目录下面的所有的文件和文件夹 cd 路径 : 目录的切换 cd ../ :切换到上一级目录 cd 路径 : 切换这个路径 mkdir : 在指定的文件夹下面创建文件夹 D: 切换到d盘 rd : 删除指定的目录(文件夹) del : 删除指定的文件 注意:是直接删除的,不是放回收站 cls : 清屏
4、使用notepad++编写第一个Java代码
4.1打开文件的后缀(文件的扩展名)
wind11:: 随便打开一个文件夹 查看 -> 显示 -> 文件扩展名 勾选即可
wind10:先打开一个文件夹 查看-》文件扩展名 勾选即可
wind7 : 先打开一个文件夹,组织 -> 文件夹及搜索选项 -> 查看 -> 隐藏已知的扩展名 不勾选
4.2编写第一个Java代码,使用工具notepad++
步骤:
1.在某一个文件夹下面新建了一个叫Hello.java的文件
2.使用工具 notepad++打开当前的Java文件
3.书写一个关键字class 关键字以后跟着的是类名,类名和文件名字要保持一致的
类名的后面跟一个大括号 是成对的
4.在 大括号里面写main主函数,这个很重要 是程序的入口,没有他代码是不能执行的。
public static void main (String[] args) { }
5.在main主函数中大括号中写一个输出语句即可
System.out.println("hello Java");
6.开始使用dos命令进行编译运行
首先得找到文件所在的目录 然后使用javac Java文件 -> 进行编译 再然后使用 java 类名 -> 运行Java类
class Hello { public static void main (String[] args) { System.out.println("hello Java"); } }
class: 类
public: 公开的 公共的
static: 静态的
void: 空的
main:主要的 重要的 没有这个就无法执行下面的代码
String:字符串 就是用双引号 引起来的 就叫字符串 “abcdef”
[]:数组
args:参数
System:系统的
out:输出的意思
println:换行打印
print:打印
写的案例是不换行打印
class First { public static void main (String args[]) { System.out.print("abcd"); System.out.print("abcd"); System.out.print("abcd"); } }
4.3乱码解决
打开notepad++,找到编码,点击编码,找到转为ANSI编码即可,
然后保存重新编译,重新运行即可
4.4Java中的注释
1.单行注释:// 注释的内容
2.多行注释 /* 注释的内容 */
3.文档注释 :/** */
/** * 注释的内容1 * 注释的内容2 */
数据类型:
基本数据类型:
整型:byte 、 short 、 int 、 long
浮点型:float 、 double
布尔类型:boolean
字符型:char
各个数据类型的范围:
整型 | 范围 | 字节大小 |
---|---|---|
byte | -128~127 | 1字节 |
short | -32768 ~ 32767 | 2字节 |
int | -2^31 ~ 2^31-1 | 4字节 |
long | -2^63 ~ 2^63-1 | 8字节 |
浮点型 | 范围 | 字节大小 |
---|---|---|
float | -3.4*10^38 ~ 3.4**10^38 | 4字节 |
double | -1.79*10^308 ~ 1.79**10^308 | 8字节 |
布尔类型 | 范围 | 字节大小 |
---|---|---|
boolean | true 或 false | 1字节 |
字符型 | 范围 | 字节大小 |
---|---|---|
char | 除了/,其他所有字符 | 不确定 |
注意事项:
(1)double 的有效数为15到16位,float 的有效数为6~7位。
(2)声明long类型数据的时候,后面需要加L或者l。
(3)声明float类型的数据的时候加f或者F,double 不用加字母。
(4)声明char类型的数据的时候,使用单引号声明。并且单引号里面只能放一个元素
举例:
public static void main(String[] args) { int age = 22 ; char sex = '男'; //Sring 类型与其他类型拼接 String str1 = "小余,"; String str2 = "今年"; String str3 = str1+str2+age+","+sex; System.out.println(str3); }
引用数据类型:
字符串类型:String
引用数据类型可以和任意数据类型用 “+” 拼接
命名规范:
类的命名:(1)大驼峰命名,首字母大写,如果是两个单词组成则两个单词的首字母都大写
(2)以数字,字母,_ ,等命名,但是数字不能开头。
变量命名:(1) 小驼峰命名,首字母小写,如果是两个单词组成则第二个单词的首字母大写
(2)首字母小写,如果是两个单词则可以用 " _ " 连接,第二个单词首字母小写。
(3)以数字,字母,_ ,等命名,但是数字不能开头。
(4)见名知意,不能用Java关键字命名
转义字符:“/”
将无意义的字符转换为有意义的字符或者将有意义的字符转换为无意义的字符;
/n:换行符,相当于回车
/t:分割符,相当于table键
// 第一个"\"将第二个"\",转为无意义的字符 System.out.println("\\"); // 第一个和第三个"\"将第二个和第四个"\",转为无意义的字符 System.out.println("\\\\"); // "换行符,相当于回车" System.out.println("哈喽\n小余"); // "分割符,相当于table" System.out.println("哈喽\t小余");
运算符:
算术运算符:
关系运算符:
逻辑运算符:
算术运算符:+(加)、-(减)、*(乘)、\(除)、%(取余)
拓展:++(自增)、–(自减)、+=、-=、/=、*=
算术优先级:自增自减 >()>乘除 > 加减 ,同级优先级从左到右,小括号从右往左
public static void main(String[] args) {
int a = 10 ;
int b = 7 ;
//加法运算
int s = a+b;
System.out.println("a+b = "+s);//17
//减法运算
int j = a-b ;
System.out.println("a-b = "+j);//3
//乘法运算
int m = a*b ;
System.out.println("a*b = "+m);//70
//除法运算
int n = a/b;//1,除法运算保留到整数
System.out.println("a/b = "+n);
//取余运算
int y = a%b ;
System.out.println("a%b = " + y);
//自增自减
int c = a;
int d = b;
c = c++;
d = d--;
//先运算再自增或自减
System.out.println("c++ = " + c); // 10
System.out.println("d-- = " + d); // 7
int c2 = a;
int d2 = b;
c2 = ++c2;
d2 = --d2;
//先自增或自减再运算
System.out.println("++c2 = " + c2); // 11
System.out.println("--d2 = " + d2); // 6
//扩展
int c3 = a ;//10
int d3 = b ;//7
c3 += d3; //17 相当于 c3 = c3 + d3;
c3 -=d3; //3 相当于 c3 = c3 - d3;
// %= 、 /= 用法一样
}
变量++; 先执行当前的操作,再自身加1
++变量;先自身加1,然后再执行当前的操作
变量–;先执行当前的操作,再自身减1
–变量;先减1,再执行操作
课后作业:
int i = 3;
int a = -(i++);
sout(a);
sout(i);int i1= 3; int a1 =-(i1++); System.out.println(a1);//-3 System.out.println(i1);//4
int i = 5;
int a;
a = i++ + i++ + i++;
sout(a);
sout(i);int i2 = 5 ; int a2 ; //a = 5 + 6 + 7 = 18 a2 = i2++ + i2++ + i2++; System.out.println(a2); // 18 System.out.println(i2); // 8
int a;
int i = 5;a = ++i + (++i) + (i++) + (i++);
5+6+8+9=28
sout(a);
sout(i);int a3 ; int i3 = 5 ; //a3 = 9+8+6+5=28 a3 = ++i3 + (++i3) + (i3++) + (i3++); System.out.println(a3); System.out.println(i3);
1、运算符
1.算术运算符
2.逻辑运算符
3.关系运算符
1.1关系运算符
> (大于)、 < (小于) 、>= (大于等于) 、<=(小于等于) 、 ==(是否等于) 、 != (是否不等于) 关系运算符的结果返回一个boolean 类型的数据
1.2逻辑运算符
逻辑运算符结果返回一个boolean 类型的数据
与 、 或 、 非
与: && 语法结构: 条件1 && 条件2 只有条件1和条件2都为true,才返回true ,只要有一个条件为false ,则返回false
或:|| 语法结构: 条件1 || 条件2 只有条件1和条件2都为false, 才返回false,只要有一个条件为true,则返回true
非:! 语法结构:!条件 与条件返回的结果相反,条件为true则返回false
1.3逻辑运算符的短路原则
与:&& 语法结构:条件1 && 条件2 && 条件3 .... 当判断到其中一个结果为false ,则直接返回false ,其他条件不再执行
或:|| 语法结构:条件1 || 条件2 || 条件3 .... 当判断到其中一个结果为true ,则直接返回true ,其他条件不再执行
注意事项:当逻辑或与逻辑与出现在同一条语句中时
语法结构:条件1 || 条件2 && 条件3 && 条件4 …
当条件1 为true时,该语句整体为true,形成短路,后面语句不再执行,如下例
int a = 10 ; int b = 5 ; boolean b1 = a>b || a>5 && ++a < 11 ; //直接短路 System.out.println(b1 + "\n" + a ); //b1 = true a = 10
int a1 = 11 ; int a2 = 11 ; int b = 5 ; //这种情况不会整体短路,只会导致a1短路 boolean bool = a<4 && ++a1<15 || ++a2<5; System.out.println(bool + "\n" + a1 + "\n" + a2 ); // bool = false , a1 = 11 , a2 = 12
2分支结构【重点】
2.1 if分支
语法格式:
if (表达式) { 语句体; }
执行流程:代码执行到if时,当小括号里面的表达式结果为true时,执行大括号里面的语句体,否则跳过大括号里面的语句体,继续往下执行
表达式返回boolean 类型,只有通过关系运算符和逻辑运算符得到的结果才能是一个boolean类型
2.2 if-else分支
语法格式:
if (表达式) { 语句体1; } else { 语句体2; }
执行流程:代码执行到if时,当小括号里面的表达式结果为true则执行其大括号中的语句体1,否则执行else 后面大括号中的语句体2
2.3 if-else if 分支结构
语法结构:
if (表达式1) { 语句体1; } else if (表达式2 ) { 语句体2; } else { 语句体3; }
执行流程:
首先判断if后面的表达式1,如果表达式1为true,就执行当前大括号里面的语句体1,后面的代码就直接跳过了。如果表达式1为false,不执行语句体1,接着判断表达式2,如果为true,执行语句体2,以此类推。
总结:就是在判断表达式,一旦表达式为true的话,就执行当前的语句体,为false,就不执行的
2.4 switch - case 结构
语法结构:
switch (表达式) { case 常量1 : 语句体1; break; case 常量2 : 语句体2; break; case 常量3 : 语句体3; break; case 常量4 : 语句体4; break; default :语句体5 ; break; }
执行流程:
switch后面的小括号里面的表达式的值,去匹配case后面的常量,如果匹配到就执行:后面的语句体。下面就不执行了。
switch (表达式){
}
表达式数据类型(面试题):表达式的值可以是什么类型?
int short byte char String 枚举
Cannot switch on a value of type long. Only convertible int values,strings or enum variables are permitted
翻译:无法打开long类型的值。只允许可转换的int值、字符串或enum变量。
char类型的有对应的ASCII值,long 转换成int 会丢失精度
1、三目运算符
语法格式:
数据类型 x = (表达式) ? value1 : value2 ;
执行流程:当表达式为true 时 , 将value1 赋值给 x ,否则将value2 赋值给 x;
public static void main(String[] args) { int x = 5; String str = (x>1) ? "x>1":"x<=1"; System.out.println(str); }
2、循环结构
循环结构有三个条件:1、初始化条件,2、循环条件,3、终止条件
三个循环:1、while循环 2、do-while 循环 3、for 循环
2.1 while 循环
语法结构:
while ( 布尔表达式){ 循环体 }
执行流程:当代码执行到while时,判断布尔表达式的值,如果布尔表达式的结果为true则执行循环体,否则直接跳过循环体往下继续执行。
public static void text3() { int i = 0; //初始化条件 while (i<4) //终止条件{ System.out.println(2*i+1); i++;//循环条件 } }
2.2 do-while 循环
语法结构: do { 语句体; } while(布尔表达式);
执行流程:
代码执行到do时,先执行一次语句体,然后再判断布尔表达式的值,若布尔表达式的结果为true时,继续执行语句体,否则跳出循环,继续往下执行。
public static void text5() { int i = 0; //初始化条件 do { System.out.println("晚上加班"); i++; //循环条件 } while (i<3);//终止条件 }
while 循环 和do-while 循环的区别:
while 循环是先判断再执行,若表达式为false,则直接跳出循环,一次也不执行
do-while 循环是先执行再判断,至少会执行一次
2.3 for循环
语法结构
for (条件1; 条件2; 条件3){ 语句体 }
表达式1:初始化的条件
表达式2:终止条件
表达式3:循环条件
执行流程:
当代码执行到for循环时,判断条件2 的值,若结果为true 则先执行下面的语句体,语句体执行完毕,再执行条件3,直到条件2为false,则跳出循环,继续往下执行。
public static void main(String[] args) { //打印 1 2 3 /** * i=1 1<3 true sout(1 ) 1 i++ 2 * i=2 2<3 true sout(2 ) 1 2 i++ 3 * i=3 3<3 false 结束循环 */ for (int i = 1; i < 3; i++) { System.out.print(i+" "); } }
2.4 嵌套循环
一个循环里面嵌套多个循环
秉承着一点:外部循环进入到内部循环后,先将内部循环运行结束后再执行外部循环
注意:外部循环控制行数,内部循环控制列数
需求:
* *** ***** *******
/** * i=1 1<5 true 进入内循环 2*i-1 = 1 * j=0 0<1 true * j++ * j=1 1<1 false 跳出内循环,换行 i++ * i=2 2<5 true 进入内循环 2*i-1 = 3 * j=0 0<3 true * j++ * j=1 1<3 true ** j++ * j=2 2<3 true *** j++ * j=3 3<3 false 跳出内循环,换行 i++ * i=3 ... * i=4 ... * i=5 5<5 false 结束外循环 * 结果: * * * *** * ***** * ******* * */ public static void main(String[] args) { for (int i = 1; i<5; i++) { for(int j = 0; j<2*i-1; j++) { System.out.print("*"); } System.out.println(); } }