java的概述与环境搭建
Java三大体系
JavaSE:Java标准版
JavaEE :j2EE Java企业及开发
JavaME:移动端 Android
Java语言和平台无关性
源码文件.java经过javac命令编译生成.class(字节码文件),把这个文件放到只要有vim的机器上就能运行(windows、linux)
编写代码的时候是在windows,而最终的项目会部署到linux下去运行
java的运行机制
编译执行
将源文件编译成机器码,一次编译,多次执行
执行效率高,但不可跨平台
解释执行
将源代码一行一行解释,一行一行执行
不同操作系统具备不同的解释器
执行效率低,可以跨平台
先编译、再解释
将源文件编译成字节码文件(平台中立文件.class),再将字节码文件进行解释执行
Java设计理念:Write Once Run Anywhere
Java的环境搭建
JVM
Java Virtual Machine 虚拟机
使用软件在不同操作系统中,模拟相同的环境
JRE
Java Runtime Environment 运行环境
包括JVM和解释器,完整的Java运行环境
JDK
Java Development Kit 开发环境
包括JRE+类库+开发工具包(编译器和调试工具)
常用的Dos操作
-
wins+R打开运行窗口
-
盘符切换:d:
-
查看当前目录下的所有文件:dir
-
切换目录:cd(change directory)+文件名
-
返回上一级目录:cd …
-
清理屏幕:cls(clean screen)
-
退出终端 exit
-
查看电脑ip ipconfig
-
打开应用
calc mspaint notepad
-
ping命令
ping www.baidu.com -
文件操作
md 目录名
rd 目录名
cd>文件名
del 文件名
Class的介绍(类)
- 同一个源文件可以定义多个类。编译后,每个类都会产生独立的.class文件。一个类中,只能有一个主函数,每个类都可以有自己的主函数
- public修饰的类称为公开类,要求类名与文件名必须完全相同
- 一个源文件中,只能有一个公开类
Package的介绍(包)
-
作用:类似于文件夹,用于管理字节码文件(.class)
-
语法:package 包名;
-
位置:必须写在源文件第一行
-
带包编译:javac -d .源文件名称.java(自动生成目录结构)
-
包的命名规范
-
不能用Java开头
-
域名.公司名.项目名.模块名 eg: com.lanou.shopping.service
-
Java的语言规范
-
书写格式
层级之间必须缩进
-
代码注释
注释是给程序员看的。所以注释不会在class文件中生成
-
单行注释//
-
多行注释/**/
-
文档注释/** */
是用来生成帮助文档的。类、属性、方法上面,写对于类、属性、方法的一个解释,生成文档(javadoc),去看源码的时候可以看文档
文档注释和多行注释不能相互嵌套
单行注释 ctrl+/ 取消注释ctrl+/
多行注释 ctrl+shift+/ 取消注释 ctrl+shift+\
-
-
标识符命名问题
- 用来取名字的
类名、参数名、属性名、方法名
-
标识符的结构:26个大小写字母构成,数字,下划线_,$,而且不能以数字开头,还不能为Java的关键字和保留字
-
关键字:
package,import,class public protected,private,byte,short,int,long,float,double,char,boolean,true,false,if else,switch,case,break,default,for,while,do,break,continue,new,void return,static,final,null,extends,this,super,abstract,interface implements instanceof,tra,try,catch finally,transient,synchronized,enum
- 保留字:goto,const
Java语言基础
变量
- 计算机内存的一块存储空间,是存储数据的基本单位
- 组成部分:数据类型 变量名 值
- 变量的值可以改变
- 声明方式
- 先声明,再赋值——数据类型 变量名; 变量名 = 值;
- 声明并赋值——数据类型 变量名=值;
- 多个同类型变量的声明与赋值——数据类型 变量1,变量2=值;
数据类型
数据类型分类
基本数据类型
-
整数类型 (数字范围:-2(位数-1)——2(位数-1)-1)
- bit(位):计算机最小存储单元
- byte(计算机基本单位) 1个字节 1byte=8bit -27—27-1
- short短整型 2个字节 16位 -2^15 —2^15-1
- int整型 4个字节 32位 -2^31 — 2^31 -1
- long长整型 8个字节 64位 -2^63 — 2^63-1
-
小数类型
-
float 单精度 32位 小数有效位:7位
-
double 双精度 64位 小数有效位:15位 d/D
在Java程序代码里面看见的整数都是int型,小数都是double类型 在程序里写的一个数字超过了int类型,在定义long类型的时候需要在数字后面加l\L
在定义float的时候如果是小数,需要在数字后面加F/f float f = 1.23f
-
-
布尔类型(boolean不能参与运算)
- true
- false
-
字符类型
char:字符
A—Z 65—90
a—z 97—122
引用数据类型
数据类型的转换
自动类型转换
两种类型相互兼容,目标类型大于源类型
强制类型转换
两种类型相互兼容,目标类型小于源类型
运算符
算术运算符
+ — * / % ++ ——
进行四则运算的时候除了byte、short这两个之外
int long float double相同运算类型进行计算时,类型不变
不同类型运算则取运算类型最大的作为计算结果的类型
byte和short进行运算时,类型取int
i++
i–
++i
–i
单独的时候则是自加减
参与运算的时候
i++/i-- 先做运算,再自加减1
++i/–i 先自加减1 再做运算
范围是环形循环
赋值运算符
= += -= *= /= %=
a = b;
a += b; //a = a + b;
a -= b; //a = a - b;
a *= b; //a = a * b;
a /= b; //a = a / b;
a %= b; //a = a % b;
1、计算1 + 2 + 3 + … + 100之和
int i = 1;
int sum = 0;
while(i <= 100){
sum += i;
i++;
}
2、计算5!的阶乘
int i = 5;
int temp = 1;
while(i > 0){
temp *= i;
i--;
}
比较运算符
== < <= > >= !=
逻辑运算符
&& & || | !
短路且(&&):判断依据:全部为真则为真
如果短路且前面的表达式返回false,则结果已经为false,则后面的表达式不会运算
int i = 1;
if(false && i++ > 12){
}
System.out.println(i);
输出:i=1;
短路或(||):判断依据:一个为真则为真。如何短路:前面为真,后面的就不会做运算
& |:不短路,其余一致
!:非
三目运算符
三元运算符
返回boolean类型的表达式?值1:值2
int i = 12;
int j = 34;
int max = i > j?i:j;
位运算符
-
& 按位与
-
| 按位或
-
^:异或 相异则为1
-
原码
-
反码
-
补码
-
按位取反(符号位参与取反)
负数的按位取反:A -(A+1) eg: -17 16
正数的按位取反:
- << 左移,相当与*2
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0
x<<y : x*2^y
- >> 右移,正数高位补0,负数由计算机决定
右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
x>>y:x/2^y
控制台输入
Scanner是用来获取用户输入的数据的
操作顺序:
-
导入包——import java.util.Scanner;(在代码最上方)
-
声明——Scanner 自定义名字 = new Scanner(System.in);
-
使用Scanner类中对应的函数(区分类型)
-
char ch = sc.next();
next(); 只能获取第一个空格之前的字符串
nextLine(); 获取一行
-
- .nextInt();//获得整数
- nextDouble();//获得小数
- next();//获得字符串
- next();charAt();//获得单个字符(数值控制第几个字符,0是第一个,依次类推)
Java选择结构与分支结构
三大结构
顺序结构
分支结构
if分支
单分支
if(){
}
双分支
if(){
}else{
}
多分支
if(){
}else if(){
}else{
}
多分支:注意:对于多分支会存在多个条件,这么多个条件有可能多个条件返回true,它只会进入第一个满足条件的分支,后面满足条件的分支是不会去执行的。
Switch分支
switch(表达式){ //表达式:byte short int char string enum
case 值1;
break;
case 值2;
break;
default:
break;
}
swich语句的穿透:switch语句进入某一个case执行代码,如果这个case里面没有break,会出现穿透,会进去下一个case继续执行代码,直到遇到break,
eg:
输入月份,打印相应的季节。春345、夏678、秋9 10 11、冬12 1 2
import java.util.Scanner;
class Demo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的月份");
switch(sc.nextInt()){
default:
System.out.println("你的月份输入有误!!!!");
break;
case 1:
case 2:
case 12:
System.out.println("冬天");
break;
case 3:
case 4:
case 5:
System.out.println("春天");
break;
case 6:
case 7:
case 8:
System.out.println("夏天");
break;
case 9:
case 10:
case 11:
System.out.println("秋天");
break;
}
}
}
Java循环结构
通过某个条件,重复执行的一段逻辑代码
for循环
for-i循环
语法:
for(初始值;表达式(判断条件);变量更新){
//初始值可以放在for循环前面;表达式返回true进入循环体;更新可以放在for循环里的最后
}
for-each循环
for循环的加强循环,一般是用来遍历一个容器,去获取容器里面的所有元素
for-each循环遍历容器,每次是直接获取容器里的元素
for(容器里面元素的类型 变量名:容器的对象){
}
while循环
while(返回boolean类型的表达式){//表达式包括方法
//循环体
}
do while循环
do{
//循环体
}while(返回boolean类型的表达式);
对于do while,先执行do里面的循环,然后再去判断是否为TRUE,为TRUE则继续执行do里面的操作,所以do while至少执行一次
首次没有入口条件
先执行再判断
while();
for();
流程控制
break
- 终止、跳出Switch、循环结构
- 循环执行中,遇到break,则退出整个循环结构
continue
- 结束本次、进入下一次循环
- 循环执行中,遇到continue,则跳过本次,进入下一次循环
补充:
System.out.print();
System.out.println(); 换行
1.XXX是什么
2.XXX从何而来
3.XXX出现是为了解决什么问题
4.XXX是自上而下推导的,还是自下而上抽象的?是前者由何推导,是后者由何抽象?(如果由技术抽象总结的概念,就去看技术具体实现)
5.XXX为何有效?
6.XXX是历史必然出现的选择吗?为什么
7.XXX如何实现
将面向对象、封装、继承、多态、抽象带入XXX一个个提问,如果都能回答上来,那么就算弄懂了这个概念了