java的简介
1、java是什么?
一种编程语言。
2、编程语言的分类
高级语言:c/c++,java,php,javaScript,python…
汇编语言:通过大量的英文单词代表计算机的指令。 add 1 1
机器语言:二进制序列,能被计算机直接识别的语言 01010111101
高级语言的分类:
**编译型语言(c/c++):**需要先将源代码进行编译,转换成特定的可执行文件(平台(操作系统)能直接执行的二进制文件)
**优点:**编译一次,永久执行,当你发布可执行文件给客户时不需要提供源代码,只提供一个可执行的二进制文件即可,体现安全性,执行速度快
**缺点:**不能跨平台
解释型语言(javaScript,python):
需要提供一个解释器,在源代码执行的时候被解释器翻译成一与平台无关的中间代码,之后再翻译成各个平台的机器语言
特点:能夸平台
缺点:运行时需要源代码,运行速度慢
3、java的特征
半编译半解释:java会将一个java文件编译(不完全编译)成一个.class文件,再将.class文件解释成各个平台能识别的机器语言
JVM(java虚拟机):相当于一个翻译官
运行原理:java编译器先将代码编译成.class文件,jvm再将.class文件解释成各个平台能够识别的机器语言
因为每个平台都有自己的jvm,有不同的系统的不同版本jdk
生命周期:
出生:只有遇到main方法,jvm就开始启动,没有main方法就启动不了,所以main方法是java程序运行的入口。
死亡:main方法执行完了之后就停止
场景:有10个main同时执行,有多少个jvm在运行呢?10个,10个jvm同时运行,互不影响
4、安装JDK
无论使用什么语言进行开发,都要安装SDK,在JAVA中称为JDK
JDK:java开发工具包
JRE:java运行环境
①检测你电脑上的安装的jdk版本 cmd进入dos窗口 java -version
②如果没有安装出现以下:‘java’ 不是内部或外部命令,也不是可运行的程序
双击执行jdk-8u92-windows-x64进行安装
更改安装位置:不能有空格,不能有中文 E:\Java\jdk1.8.0_92\
安装JRE:更改安装位置即可 E:\Java\jre1.8.0_92\
③:cmd进入dos窗口 java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
④:检测编译环境 javac
‘javac’ 不是内部或外部命令,也不是可运行的程序
⑤配置jdk环境变量
右键我的电脑–属性–高级系统设置–环境变量
系统变量中–新建–JAVA_HOME:jdk根目录
path–编辑–添加%JAVA_HOME%\bin 注意一定是最前面
⑥测试javac
- jdk目录: bin:可执行的二进制文件 lib:程序运行所依赖的jar和一些二进制文件 src.zip:源码包
- jvm和jre的关系: jre=jvm+程序运行依赖的简单jar包
⑦第一个java程序 Hello World
⑧eclipse的使用:
workspace:工作空间
项目结构:src:资源目录,放java代码的地方–类路径
快捷键(代码提示):ALT+/
- 控制台打印输出:
System.out.println("Hello World");
-
右键Class–run as–java Application 运行
- 注意:该类一定要有main方法
-
eclipse会自动帮我们编译src目录下的.java文件,编译好的.class存放在bin目录下
变量和运算符
1、关键字、保留字、标识符
**关键字:**对编译器有特殊意义的单词,java中已经将其使用
保留关键字:对编译器有特殊意义的单词,java中没有使用它作为关键字,以后用不用不知道
***注意:**关键字和保留字不能用作自己定义的变量名、方法名、类名、包名
标识符:包、类、方法、参数和变量的名称总称为标识符
规则:
必须以字母、下划线(_)或美元符号($)开头;
余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
标识符中不能有空格;
不能使用Java中的关键字或者保留字做为标识符;
命名规范:
- 包名: 域名.公司名.项目名.种族 com.neusoft.helloworld.test
- 类名:驼峰命名法 / \_ / \_ 每个英文首字母必须大写 : Student ,StudentHome,student_home
- 方法名:驼峰命名法 第一个英文首字母小写,其他首字母大写: getNameAndPassword
- 参数和变量的名称:驼峰命名法 第一个英文首字母小写,其他首字母大写
- 常量名:全部大写,每个英文用下划线隔 ‘_’
常量:常量指程序里持续不变的值,在整个程序运行过程中它是不可改变的
变量:程序运行过程中随时可以发生改变的量,变量是程序中数据临时存放的场所
public static void main(String[] args) {
//声明
int age;
//初始化 赋值
age=10;
//使用
System.out.println(age);
//定义一个变量 声明+初始化
int sex=1;
System.out.println(sex);//1
sex=20;
System.out.println(sex);//20
}
数据类型:
-
基本数据类型: 声明的变量存在栈区
-
数值型(数字)
-
整型:byte,short,int,long
//1G-1024mb 1mb-1024kb 1kb-1024b //整型 byte short int long /** byte 大小:1字节 8位 -2^7~2^7-1 -128~127 */ byte b1=123; byte b2=127; /*byte b3=128;*/ /**short 大小:2字节 16位 -2^15~2^15-1 */ short s1=12345; /**int 大小:4字节 32位 -2^31~2^31-1* 默认整型是int*/ int i1=12312312; /*System.out.println(i1);*/ //进制 进制之间的转换最好先转为10进制 int i2=12419;//10进制 int i3=0x15A;//16进制 0x开头 A:10 F:15 10*16^0+5*16^1+1*16^2 System.out.println(i3);//346 int i4=065;//8进制 必须以0开头 System.out.println(i4);//53 int i5=0b10101; //2进制 0b开头 1*2^0+0*2^1+1*2^2+0*2^3+1*2^4 System.out.println(i5);//21 /**long 大小:8字节 64位 -2^63~2^63-1*/ long l1=1231312L;
-
浮点型:float,double
//浮点型 float double /**float 大小:4字节 32位 -2^31~2^31-1*/ float f1=123.456F; /**double 大小:8字节 64位 -2^63~2^63-1默认是double*/ double d1=123.456d;
-
-
字符型:char
//字符型 char /**char 单个字符*/ char c1='r'; /*char c2='rs';*/ char c3='中'; /*System.out.println(c3);*/ /**char 整型 2字节 16位 0~2^15-1 */ //char类型接收整型数据,jvm会去查找ascil码表找到这个整型对应的ascil码值 char c4=49; System.out.println(c4);//1 char c5=62; System.out.println(c5);//> /**char Unicode字符 \u03A6表示一个字符*/ char c6='\u03A6'; System.out.println(c6);//Φ char c7='\u0024'; System.out.println(c7);//$ /**char 十六进制 --将16进制转为十进制然后找该十进制数对应的ascil码值 */ char c8=0x0041; System.out.println(c8);//A
-
布尔型:boolean
-
2、引用数据类型:声明的变量存在堆区
- 类:class
- 接口:interface
- 数组:Arrays
运算符:
-
概念:是一种特殊的符号,用以表示数据的运算、赋值和比较
-
运算符的种类:
赋值运算符:=、+=、﹣=、=、/=、%=
//赋值运算符:=、+=、﹣=、*=、/=、%= 从右往左读 int age=12; //+= age+=12;//age=age+12 System.out.println(age);//24 age/=2;//age=age/2 System.out.println(age);//12
算术运算符: +、﹣、*、/、%、++、 -
//算术运算符: +、﹣、*、/、%、++、 -- int i1=-5/-3; System.out.println(i1);//1 求整 负负得正 int i2=-5%-3; System.out.println(i2);//-2 求余 符号和被除数一致 //++ 自增 --自减 //++在右边 先赋值给表达式,后做计算 /*int i3=10; System.out.println(i3);//10 i3++; System.out.println(i3);//11 */ int i31=10; System.out.println(i31++);//10 System.out.println(i31);//11 //++在左边 先计算,先赋值给表达式 /*int i4=10; System.out.println(i4);//10 ++i4; System.out.println(i4);//11 */ int i41=10; System.out.println(++i41);//11 System.out.println(i41);//11 int i5=10; int i6=i5++; System.out.println(i6);//10 int i7=10; int i8=++i7; System.out.println(i8);//11
比较运算符:>、<、>=、 <=、= =、!=、instanceof
// 比较运算符:>、<、>=、 <=、= =、!=、instanceof 返回boolean 值 System.out.println(6>7);//false boolean temp=67>69; System.out.println(temp);//false //==用于数值类型的比较 比较的是值是否相同 System.out.println(78==89);//false int age1=100; if(age1==200) { System.out.println("年龄太大"); } //!= 比较的是值是否不相同 if(age1!=200) { System.out.println("不是200岁"); } //instanceof 用于判读该对象是否属于某个类型的 用于引用数据类型--同一类型 了解即可 String sd="2015-12-12"; Date d=new Date(); if(d instanceof Date) { System.out.println("是日期类型"); } /*if(mao instanceof dongwu) { }*/
逻辑运算符:!、&&、||
/**逻辑运算符:!、&&、|| 非 与 或 返回boolean 表达式返回的值一定是boolean ,整个逻辑表达式返回boolean*/ /*&& 表达式1&&表达式2 表达式1和表达式2都返回true整个表达式才为true 只要&&一边为false就为false */ boolean t1=1>2 && 2<3; //|| 表达式1||表达式2 表达式1和表达式2只要有一个表达式返回true整个表达式就为true,||两边都为false才为false boolean t2=1>2||2<3; int money=200000; int age2=25; boolean t3 =money>250000 || age2<30; System.out.println(t3);//true //! 逻辑非 将true变为false,将false变为true boolean t4=false; System.out.println(!t4);//true
位运算符: &、|、^ 、 ~、>>、<<、>>>
/**位运算符: &、|、^ 、 ~、>>、<<、>>>*/ //按位“与” & 只有参加运算的两位都为1,&运算的结果才为1,否则为0 int j1=9; int j2=3; /* 1001 * 0011 * 0001 * j1=j1 & j2; System.out.println(j1);//1 */ //按位“或” | 只有参加运算的两位都为0,|运算的结果才为0,否则为1 /* 1001 * 0011 * 1011 * j1=j1 | j2; System.out.println(j1);//11 */ //异或 ^ 只有参加运算的两位不同,^运算的结果才为1,否则为0 /* 1001 * 0011 * 1010 */ j1=j1 ^ j2; System.out.println(j1);//10 //<< 左移 p<<a 公式:p*2^a 变大 int p=10; p=p<<4; System.out.println(p);//160 //>> 右移 y>>a 公式 :y/2^a 变小 int y=10; y=10>>2; System.out.println(y);//2
逻辑运算符和位运算符区别
/**逻辑运算符和位运算符区别*/ //逻辑&& 表达式1&&表达式2 表达式1为false是表达式2不运行了 具有短路功能 int p1=10; boolean t5=p1<8 && p1++>5; System.out.println(p1);//10 //按位& 表达式1&表达式2 表达式1为false是表达式2会继续运行了 不具有短路功能 int p2=10; boolean t6=p2<8 & p2++>5; System.out.println(p2);//11 //|| 表达式1||表达式2 表达式1为true是表达式2不运行了 具有短路功能 int p3=10; boolean t7=p3<20 || p3++>5; System.out.println(p3);//10 //按位| 表达式1|表达式2 表达式1为true是表达式2会继续运行了 不具有短路功能 int p4=10; boolean t8=p4<20 | p4++>5; System.out.println(p4);//11
条件运算符: ?:**
/**条件运算符: ?: 表达式1?表达式2:表达式3 如果表达式1为true返回表达式2否者返回表达式3 * * 相当于 if()else{} * */ char sex='男'; /*int new_sex*/ int new_sex=sex=='男'?1:2; System.out.println(new_sex);//1 int sex1=0; if(sex=='男') { sex1=1; }else { sex1=2; }
运算符的优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符** 括号优先级最高
流程控制
条件语句
1.IF语句
单一条件 | if(表达式){ 语句块} | 表达式为true就执行语句块 |
---|---|---|
多条件 | if(表达式){语句块1}else{语句块2} | 表达式为true就执行语句块1否则执行语句块2 |
多分支 | if(表达式1){语句块1}else if(表达式2){语句块2}else{语句块3} | 表达式1为true就执行语句块1,表达式2为true执行语句块2,都不满足执行语句块3 |
//单一条件
if(true) {
System.out.println("你好");
}
//多条件
int money=250000;
int sex=30;
if(money>300000 && sex<30) {
System.out.println("那么结婚吧");
}else {
System.out.println("你是个好人");
}
//多分支
//需求:年龄:20-30:200 30-40:300 40-50:500
int age=18;
int level=age/10;
if(level==2) {
System.out.println("你的奖金是200");
}else if(level==3) {
System.out.println("你的奖金是300");
}else if(level==4) {
System.out.println("你的奖金是400");
}else {
System.out.println("你没奖金");
}
}
2、switch语句
/**
* Switch语句 相当于if(){}else if(){}else{}
* case:不能有重复判断的值,case中的值必须要与switch表达式的值具有相同的数据类型,必须是常量
* default:匹配所有不满足情况下执行语句块
* default:一般放在语句块的最后,前提是所有条件不满足,最后执行 ,可以没有default语句
* break:跳出整个switch判断
* switch语句的结束:1、遇到break 2、执行完整个switch语句
* @author wudagai
*switch (表达式a){
case 取值1:
语句块1
break;
…
case 取值n:
语句块n
break;
default:
语句块n+1
}
表达式的值只可以接受四个基本数据类型和对应包装类(int、byte、char、short) 、
String型、枚举型,不接受其他类型的值
表达式a的值接受String类型只在JDK7及以后版本有效
*/
//需求:年龄:20-30:200 30-40:300 40-50:500
/*int age=18;
int level=age/10;
switch(level) {
case 2:
System.out.println("奖金是200");
break;
case 3:
System.out.println("奖金是300");
break;
case 4:
System.out.println("奖金是400");
break;
default:
System.out.println("无奖金");
}*/
String name="家豪";
switch(name) {
case "张三":
System.out.println("小张爸爸");
break;
case "家豪":
System.out.println("有女朋友");
break;
case "李四":
System.out.println("李四爸爸");
break;
}
int age=18;
int level=age/10;
switch(level) {
default:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
break;
}
3、变量的作用域:
/**
* 只有初始化之后才能使用
* 作用域:每个方法或者代码块的花括号就是一个作用域
* 变量声明在某个作用域中,只能在该作用域中生效
* 在同一个作用域中变量不能被重新定义
*/
public static void main(String[] args) {
/*System.out.println(a);//a 还没有被声明*/
int a; //a的作用域是整个main方法
a=10;
/*System.out.println(a);*/
if(a<20) {
int b=10;//b的作用域在if语句块中
System.out.println(a);
}
}
4、获取控制台输入:
/*String s1="张三我爱你";
System.out.println(s1);
//字符串的拼接 常量用引号,变量不需要用引号,用+号连接
int a=10;
System.out.println("a:"+a);*/
//System.in 输入流 获取控制台输入的信息
Scanner sc =new Scanner(System.in);
System.out.println("请输入字符串");
String message=sc.nextLine(); //这个方法会阻塞,等待控制台输入,程序会等待用户输入后再继续执行
System.out.println("请输入整型");
int i=sc.nextInt();
System.out.println("请输入浮点型");
double d=sc.nextDouble();
System.out.println("i:"+i);
System.out.println("d:"+d);
System.out.println("message:"+message);
5、产生随机数
Random r=new Random();
//默认取值 int范围之内 -2^31~2^31-1
int i=r.nextInt();
System.out.println("i:"+i);
//随机产生0~9 之间的数值
int j=r.nextInt(10);
System.out.println(j);
/*产生一个12以内的随机数作为月份,输出该月份的天数。 1-12
1、3、5、7、8、10、12月天数为31
2月天数为28
4、6、9、11月天数为30*/
int money=r.nextInt(12);//0-11
int money1=r.nextInt(13);//0-12
int money2=r.nextInt(12)+1;//1-12
6、while和do_while循环
public static void main(String[] args) {
/*
while(A表达式){
B语句块
}
如果A表达式为true,B语句块执行,当A表达式为false时,循环终止
=======================================================
do{
B语句块
}while(A表达式);
如果A表达式为true,B语句块执行,当A表达式为false时,循环终止
注意:do_while无论条件是否满足,都会执行一次
=========================================================
死循环:
产生的条件:没有循环终止条件
死循环后面不要写代码,会编译报错
*/
//循环输出1-9
int i=1;
/*while(i<1) {
System.out.println("i:"+i);
i++;
}
System.out.println("=========================");
do {
System.out.println(i);
i++;
}while(i<1);//分号不要忘记
*/
/*while(true) {
System.out.println("我还年轻,我喜欢运动");
}*/
Scanner sc=new Scanner(System.in); //导包快捷键 ctrl+shift+o
while(true) {
String message=sc.nextLine();
System.out.println("message:"+message);
}
7、for循环
/*
for(初始化表达式A;循环条件表达式B;循环后的操作表达式C){
语句块D
}
初始化表达式A只执行一次,循环条件表达式B为true执行语句块D,
for循环执行顺序:
初始化表达式A
语句块D
循环后的操作表达式C0
语句块D
循环后的操作表达式C1
语句块D
循环后的操作表达式C2
死循环:没有循环终止条件
*/
/* for (int i = 0; i < 10; i++) {
System.out.println("i:"+i);
}
*/
/*//测试for循环执行顺序
int i=0;
for (System.out.println("初始化表达式A"); i <3; System.out.println("循环后的操作表达式C"+i++)) {
System.out.println("语句块D");
}*/
//死循环1 没有循环判断表达式
/*for(;;) {
System.out.println("我爱你中国");
}*/
//死循环2 没有循环判断表达式
/*for(int i=0;;) {
System.out.println("我爱你中国");
}*/
//死循环3 没有循环判断表达式
/*for(int i=0;;i++) {
System.out.println("我爱你中国"+i);
}*/
//死循环4 循环判断一直为true
for(int i=0;i<10;) {
System.out.println("我爱你中国"+i);
}
}
8、循环嵌套
/**
* 1*1=1
* 1*2=2 2*2=4
* 1*3=3 2*3=6 3*3=9
* ........
* *****
* *****
* *****
* *****
*
* *****
* ****
* ***
* **
* *
*
* *
* **
* ***
* ****
* *****
*/
/*for(int i=0;i<10;i++) {
System.out.println(i);
}*/
for(int i=1;i<=9;i++) {
/*System.out.println("i:"+i);*/
for(int j=1;j<=i;j++) {
/*System.out.println("i:"+i+"j:"+j);*/
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println("-----------------");
}
9、循环中断
/*
* 1、break: 终止整个循环
* 2、continue: 终止当前循环,进入下一次循环
* 3、break lable:终止指定的循环
*/
/*for(int i=0;i<10;i++) {
if(i==5) {
break;
}
System.out.println("i:"+i);//0 1 2 3 4
}
System.out.println("--------------------");
for(int i=0;i<10;i++) {
if(i==5) {
continue;
}
System.out.println("i:"+i);//0 1 2 3 4 6 7 8 9
}*/
//equals:判断两个字符串内容是否相同
out:for(int i=0;i<10;i++) {
System.out.println("i:"+i);
inner:while(true) {
Scanner sc=new Scanner(System.in);
String message=sc.nextLine();
System.out.println("message:"+message);
if(message.equals("over")) {
/*break;//跳出while循环*/
break out;
}
}
}