Java入门
1.java的发展历史:
1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;(高司令green Oak(橡树)跨平台)
1994年将Oak语言更名为Java
1995年,推出了java测试版
1996年,Jdk1.0
1997年jdk 1.1
1998年jdk1.2,被大量的人所使用
2004年,jdk1.5
2006年,jdk1.6
2011年,jdk1.7
2014年,jdk1.8,企业用的比较多
2017年,jdb1.9
2018年3月,java 10
2018年9月,java11
2019年3月,java12
2019年9月,java13
2020年3月,java14
2.Java的三种技术架构:
JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;
JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;
JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;
1,JDK:Java Development Kit:java的开发和运行环境,java的开发工具和jre。
2,JRE:Java Runtime Environment:java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。
3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
环境变量的配置:
①:永久配置方式:JAVA_HOME=%安装路径%\Java\jdk
path=%JAVA_HOME%\bin
②:临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin
特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
classpath的配置:
①:永久配置方式:classpath=.;c:;e:\
②:临时配置方式:set classpath=.;c:;e:\
注意:在定义classpath环境变量时,需要注意的情况
如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
还会在当前目录找吗?两种情况:
①:如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。
②:如果classpath的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。
一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。
—————————————————————————————————
Java到底学什么?很多人可以刚学完Java时完全不知道Java的结构是怎样的,导致学习的知识点零星、散落,这也是为什么明明很基础的内容,但是一段时间之后自己却想不起来是怎么写的。没有梳理知识的脉络,将所学打通,融汇于一处。
首先,来看Java基础结构图:
—————————————————————————————————
1、什么是程序像一个汉字(设计语言)写的红烧肉的菜谱(程序),用于指导懂汉语的人来做菜。
2、常用dos命令md(make directory): 创建目录rd(remove directory): 删除目录cd空格(change directory): 进入指定目录cd… : 退回到上一级目录cd : 退回到根目录exit : 退出dos 命令行Shift+右键->在此处打开命令行窗口**
3、javac命令和java命令做什么事情呢?
要知道java是分两部分的:一个是编译,一个是运行。
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。 生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。
java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行.一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.
4、Java的分支:JavaME:已经被淘汰了,移动应用JavaSE:java基础,他是JavaEE基石,控制台项目,桌面应用程序JavaEE:企业应用项目
5、java语言的特点:简单易用:跨平台:jvm虚拟机实现跨平台面向对象支持多线程6、Java语言的跨平台
6.1什么是跨平台通过java开发的应用程序可以在不同操作系统中去运行,一次编译到处运行
6.2怎么实现跨平台
通过java虚拟机实现的跨平台
7.JDK
7.1什么是JDK
Jdk开发工具包就相当于一个电工的工具包
7.2jdk包含什么
Jdk包含jre,java的开发工具JRE:java运行环境,开发好的java程序需要通过jre去运行比如轮船和大海一堆Java工具(javac.exe编译工具java.exe执行工具)和Java基础类库
7.3jre包含什么Jar包含jvm,java程序的ApiJVM:JAVA虚拟机,java程序的翻译官,是java跨平台的核心
7.4Jdk JRE JVM他们之间的关系
JDK>JRE>JVM
Jdk:开发java程序
Jre:运行java程序
Jvm:跨平台的核心
8.安装jdk右键电脑-属性-高级系统设置-环境变量-添加系统变量JAVA_HOME
把系统变量JAVA_HOME添加到系统变量path里面:
打开cmd窗口,输入java-version命令,检测jdk是否配置成功
9.java程序运行过程
10.关键字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写,JDK 8中有50个关键字,这些关键字都是小写的
11.Java中的标识符:
①定义:在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。组成:标识符可以由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,也不能是Java中的关键字。
②合法标识符示例:
Username
username123
user_name
_userName
③非法标识符示例:
123username // 不能以数字开头
Class //不能是关键字
Hello World //不能包含空格特殊字符
④Java标识符-通用规范
包名所有字母一律小写。例如:com.hpe.example。
类名和接口名每个单词的首字母都要大写。例如:ArrayList、Iterator。
常量名所有字母都大写,单词之间用下划线连接。例如:DAY_OF_MONTH。
变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写。例如:lineNumber、getLineNumber。
在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。例如:使用userName表示用户名,password表示密码。
**
**
1.整型常量
整型常量是整数类型的数据,有二进制、八进制、十进制和十六进制4种表示形式。
2. 浮点数常量
浮点数常量就是在数学中用到的小数,分为foat单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。浮点数常量还可以通过指数形式来表示。具体示例如下:
2e3f 3.6d 0f 3.84d 5.022e+23f
3. 字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引’’号引起来,它可以是英文字母、数字、标点符号以及由转义序列来表示的特殊字符。一个字符串可以包含一个字符或者多个字符,也可以不包括任何字符,即长度为零。具体示例如下:
‘a’ ‘1’ ‘&’ ‘\r’ ‘\u0000’
4. 字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号””引起来,具体示例如下:
“HelloWorld" “123" “We come \n XXX” "”
5、布尔常量
布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假。
6、null常量
null常量只有一个值null,表示对象的引用为空。
1.什么是变量?
在内容中的一块区域,变量的值可以在某一个范围内发生改变
2.怎么定义变量?
变量类型 变量名; int num;
变量类型 变量名=对应的变量值; int num=10;
3.变量的类型有哪些呢?
基本数据类型
整数 byte short int long 常用的是int
小数 double float 常用是double
布尔 boolean 常用在逻辑运算符
字符char
引用数据类型:数组 java定义的类 自己定义的类 接口 枚举 注解
4.变量的分类
(1)成员变量:定义在类的内部,方法之外,可以在当前类的内部使用
(2)局部变量:定义在方法内部,只能在当前方法内部使用
1.自动类型转换:把小的放到大的里面
2.强制类型转换:把大的放到小的里面
3.把字符串类型转换成其他数据类型(使用对应包装类的parsexxx()方法)
算术运算符
/
%
1.自增运算 ++ 在原有的基础上,累加1(涨一个数)
2.自减运算 – 在原有的基础上,累减1(降一个数)
使用格式:
可以在变量前面使用++ ++num
可以在变量后面使用++ num++
前后有啥区别?
1.如果单独使用的话,没有任何区别
2.混合使用
(1).如果是后++,先使用变量的值,然后在+1,先用后加
(2),如果是前++,变量的值会立马+1,如果拿着累加的值进行使用,先加后用
*赋值运算符:
就是把右边的值赋值给左边的变量
=:不是相等的意思,
+=: a=a+b;可以简写成a+=b,
-=
*=
/=
%=
比较运算符:
比较两个变量值 只是针对于基本数据类型进行比较
比较后只能是Boolean,要么为true要么为false
== 比较两个值是否相等
<
!=
=
<=
逻辑运算符:
&(并且):所有的条件都为true,返回true,如果其中有一个为false,就为false
|(或者):只要有一个为true,就返回true,如果都为false,返回false
^(异):相同为false,不同为true
!(非):本来是false改成true
逻辑运算符 &和|可以双写
单写和双写有什么区别呢?
1.短路与:如果左侧已经可以判断最终结果了,那么后面的判断将不会再被执行
以后开发使用短路与,因为他的开发执行效率高
三元运算符:
条件表达式?表达式1:表达式2
如果条件表达式为true,执行表达式1
如果条件表达式为false,执行表达式2
1.类名必须和文件名一致
2.public:访问修饰符
3.class:定义类的关键字
4.类名:首字母大写,不要使用拼音或者中文,驼峰式命名法,每个单词的首字母大写
5.main方法是java程序的入口,需要执行的代码必须放到main方法里面,后期学了javaee用的不是太多了
6.java语言严格区分大小写 int a; int A;
7.Java方法由一条条语句构成,每个语句以“;”结束。
8.大括号都是成对出现的,缺一不可。
9.一个java文件里面可以定义多个类,但是只能有一个类名的访问修饰权限为public
什么是关键字?
java给我们定义一些特殊单词,每个关键字都有自己独有的功能
1.全是小写
2.关键字不能当做普通的标识符
什么是标识符?
自定义的类,方法名,包名,变量名,接口名…这些统称标识符
1.字母,数字,下划线 $
2.不能以数字开头
3.不能是关键字,或者包含特殊字符
4.定义方法名和变量名首字母小写,驼峰式命名法,如果定义常量,全部大写
4.if语法结构:
if(判断条件){
代码块;
}
执行:
1.进入判断条件,看是否满足,true或false
2.如果true,执行If里面的代码块
3.如果false,不会执行if里面的代码块
5.if(条件表达式){
语句1;
}else{
语句2;
}
执行流程:
1.进入if后面的条件判断 true false
2.如果未true,执行if里面的语句1;
3.如果未false,执行else里面的语句2
6.多重if
if(条件表达式1){
语句1;
}else if(条件表达式2){
语句2;
}else if(条件表达式3){
语句3;
}
…
}else{
语句4;
}
7.嵌套if:就是在if里面在添加一个if
学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组。
8.switch语句
张三参加计算机编程大赛
如果获得第一名,将参加山东大学组织的1个月夏令营活动
如果获得第二名,将奖励惠普笔记本电脑一台
如果获得第三名,将奖励2T移动硬盘一个
否则,不给任何奖励
①用if实现
Scanner sc=new Scanner(System.in);
System.out.println(“请输入排名:”);
int ranking=sc.nextInt();
if(ranking1){
System.out.println(“山东大学组织的1个月夏令营活动”);
}else if(ranking2){
System.out.println(“惠普笔记本电脑一台”);
}else if(ranking==3){
System.out.println(“2T移动硬盘一个”);
}else{
System.out.println(“没有任何奖励”);
}
**②switch实现**
Scanner sc1=new Scanner(System.in);
System.out.println(“请输入排名:”);
int ranking1=sc1.nextInt();
switch(ranking1){
case 1:
System.out.println(“山东大学组织的1个月夏令营活动”);
break;
case 2:
System.out.println(“惠普笔记本电脑一台”);
break;
case 3:
System.out.println(“2T移动硬盘一个”);
break;
default:
System.out.println(“没有任何奖励”);
break;
}
③编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>=90 等级:A
70=
1.while循环结构
* 什么是循环?
* 通过循环语句返回执行同一个操作
* while循环
* 语法:
* ①:初始化
* while(②循环条件){
* ③循环体;
* ④累加器;
*
* }
* 执行流程:
* 1.加载初始化变量① 。执行一次
* 2.根据循环条件进行判断②,
* 如果判断结果为true,执行循环体③,执行累加器④,
* 在返回来进行循环条件判断②,如果判断结果为true,执行循环体③,执行累加器④,以此类推。
* 直到循环条件不满足,结束循环
2.do while 循环结构
语法:
* ①初始化变量
* do{
* ②循环体;
* ③,累加器
* }while(④循环条件);
*
* 执行顺序:
* 1.初始化变量
* 2.执行do里面的循环体和累加器,执行完成以后执行循环条件判断,如果判断结果为true,
* 继续执行do里面的循环体和累加器,以此类推,直到循环条件不满足为false的情况下,结束循环
*
* while和do…while区别
* 1.while:先判断后执行
* 2.do…while:先执行后判断,至少会执行一次循环体
3.for循环结构
for循环使我们使用最多的一种,为我们专门提供了一个位置,存放三个表达式:
* 1.初始化表达式
* 2.循环条件表达式
* 3.累加器
*
* 语法:
* for(①初始化表达式;②条件表达式;④累加器){
* ③循环体
* }
*
* 执行流程:
* 1.执行初始化表达式①
* 2.执行条件表达式②,如果条件满足,为true,执行循环体③
* ,执行累加器④,继续执行条件表达式②,如果条件满足,为true,执行循环体③
* ,执行累加器④。。。以此类推。。直条件表达式不满足,结束循环
*
* while和for循环:
* 特点;while:适用在循环次数不顾定的场合,for循环更适合循环次数固定的场合
1、键盘输入一个正整数n,计算1+2+…+n,并输出
Scanner sc=new Scanner(System.in);
int sum=0;//求和
System.out.println(“请输入一个正整数:”);
int num=sc.nextInt();
for(int i=1;i<=num;i++){
sum+=i;
}
System.out.println(sum);
2、使用for循环方式打印100以内4的倍数
for(int i=1;i<=100;i++){
if(i%4==0){
System.out.println(i);
}
}
3、找出100-999之间的水仙花数(重点记一下)
for(int i=100;i<=999;i++){//重点记一下
// Cba=cCc+bbb+aaa
// 153=1+125+27
// 1^3 + 5^3+ 3^3 = 153
//求着这个数字的百位 十位 个位
//一个三位数 百位
int a=i/100;
//十位
int b=i/10%10;
//个位
int c=i%10;
if(aaa+bbb+ccc==i){
System.out.println(i);
}
}
2.某次程序大赛,3个班级各4名学员参赛,计算每个班参赛学员的平均分
Scanner sc= new Scanner(System.in);
//外层循环控制班级
for(int i=0;i<3;i++){
System.out.printf(“请输入第%s个班级的学信息\n”,i+1);
//定义一个变量记录每个班级4名学员的总成绩
int sum=0;
//定义一个变量记录每个班级的平均分
int avg=0;
//内层循环控制每个班级的学员
for(int j=0;j<4;j++){
System.out.printf(“请输入第%s名学员的成绩:”,j+1);
//获取学员成绩
int score=sc.nextInt();
sum+=score;//计算总成绩
}
//求平均成绩
avg=sum/4;
System.out.printf(“第%s班级的平均成绩:”+avg,i+1);
System.out.println();
}
3.九九乘法表
//外层控制行
for(int i=1;i<=9;i++){
//内层控制列
for(int j=1;j<=9;j++){
System.out.print(i+""+j+"="+ij+"\t");
}
System.out.println();
}
4.break和continue
break:一旦执行,整个循环立马结束
//按顺序打印1-10,遇到3终止打印
for(int i=1;i<=10;i++){
if(i3){
break;
}
System.out.println(i);
}
continue:跳过当次循环,继续执行下一次循环
//30的楼,如果是4楼跳过,继续下一次循环
for(int i=1;i<=30;i++){
if(i4){
continue;
}
System.out.println(i);
}