JAVA 语言
一:开发环境准备
1.JDK安装
2.环境变量配置
PATH : 指向java安装的 bin 目录
CLASSPATH: 为类路径,java运行时查找类文件的路径,java的环境变量在“系统变量”选项区域中查看PATH变量,如果不存在,则新建变量 PATH,否则选中该变量,单击“编辑”按钮,在“变量值”文本框的起始位置添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;或者是直接%JAVA_HOME%\bin;在“系统变量”选项区域中查看CLASSPATH 变量,如果不存在,则新建变量CLASSPATH,否则选中该变量,单击“编辑”按钮,在“变量值”文本框的起始位置添加.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
测试: doc命令行窗口输入 javac
二:关键字
概念:被java赋予特定含义的单词;
关键字注意事项:goto和const作为保留字存在,目前并不使用类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观。高级记
事本:notepad++,editplus等等这些工具对关键字有特殊的颜色标记。
开发工具:eclipse,myeclipse也是对关键字有特殊颜色标记。
组成关键字:字母全小写。
eclipse:
alt+/:自动提示,代码补全:神键
复制代码:ctlr+alt+向下方向键
删除代码:选中代码:ctrl+d
注释:多行注释:ctrl+shift+/
public class HelloWorld {
public static void main(String[] args) {
//输出语句
System.out.println("helloworld");
// System.out.println("helloworld");
// System.out.println("helloworld");
// System.out.println("helloworld");
}
}
三:标识符
标识符:是一种规则;给包,类名,接口,方法,变量起名字的字符序列!
组成规则:1)英文大小写字母
2)数字字符
3)_和$组成
软件开发: 需求分析
系统分析
功能,性能测试(测试工程师)
给类,接口,变量,方法命名要遵循四个字:见名知意 Student:学生 S:
注意事项:不能以数字开头。
不能是JAVA中的关键字。
JAVA严格区分大小写。
1)包(目录)的命名:不管是单级包还是多级包:字母全都小写,写法:公司域名的反写(后面在跟上哪个部门)。
单级包:举例:
org
java的源文件...
多级包:举例:
org.westos
org
westos
java的源文件..
2)类和接口的命名:
单个单词:首字母大写,其余小写。
举例:Demo
多个单词:每个单词的首字母都大写,其余小写。
举例:HelloWorld
3)给变量和方法的命名:
单个单词:字母全部小写
举例:main():程序的主入口求两个数据之后:sum()
多个单词:第一个单词字母全部小写,从第二个单词开始,每个单词的首字母都大写,其余小写
举例:checkUserName(),checkPassword()
4)常量的命名:
单个单词:字母全部大写
举例:HELLO
多个单词:字母全部大写,每一个单词和单词之间用下划线隔开
举例:HELLO_WORLD
public class MakeNameDemo {
public static void main(String[] args) {
//定义变量
int a = 10 ;
//不能以数字开头
// int 1b = 20 ;
//不能是java中的关键字
// int class = 20 ;
// int Class = 20 ;
}
}
四:注释
1)。注释概述
—用于解释说明程序的文字
2)。Java中注释分类格式
—单行注释
格式://注释文字
—多行注释
格式:/*注释文字*/
—文档注释
格式:/**注释文字*/
3).注释是一个程序员必须要具有的良好编程习惯。
初学者编写程序可以养成习惯:先写注释再写代码。
将自己的思想通过注释先整理出来,在用代码去体现。
因为代码仅仅是思想的一种体现形式而已。
五:常量
1)。常量概述
在程序执行的过程中其值不可以发生改变
2)。Java中常量分类
字面值常量
自定义常量
3)。常量的分类:
1:字面值常量
a:字符串常量:使用双引号括起来的内容:
"helloworld","我爱高圆圆"....
b:字符常量:使用单引号括起来的单个字母或者数字
'A','a','0'
'ab':错误的写法
c:整数常量:
100,1000
d:小数常量
3.1415926...
e:布尔常量:
true或者false
f:空常量:
null
public class ConstantDemo {
public static void main(String[] args) {
//字符串常量
System.out.println("helloworld");
//字符串 +(拼接符号) 任何数据 = 字符串
System.out.println("helloworld"+'a'+1);//helloworlda1
System.out.println('a'+1+"helloworld");//98helloworld
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
System.out.println("------------------------");
//字符常量
//不参与运算
System.out.println('A');
System.out.println('a');
System.out.println('0');
// System.out.println('ab');
System.out.println("------------------------");
//当字符参与运算的时候,就需要带ASCII码表中找字符对应的值
//'A'---->65
//'a'---->97
//'0'---->48
System.out.println('A'+1);
System.out.println('a'+1);
System.out.println('0'+1);
System.out.println("----------------------");
//整数常量
System.out.println(100);
//小数常量
System.out.println(3.1415926);
System.out.println("-------------------");
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量
String s = null ;//针对引用类型
System.out.println(s);
}
}
4)。Java针对整数常量提供了4种表现形式
1.二进制:由0.1组成,以0b开头。
2.八进制:由0.1...7组成,以0开头。
3.十进制:整数默认十进制,由0.1...9组成。
4.十六进制:有0.1...9.a.b.c.d.e.f(大小写均可),以0x开头。
任意进制到十进制的转换
十进制到任意进制的转换
5)。进制练习题。
0b100,0100,0x100计算分别对应的十进制是多少?
代码
public class JinZhiDemo {
public static void main(String[] args) {
System.out.println(0b100);
System.out.println(0100);
System.out.println(100);//默认十进制
System.out.println(0x100);
}
}
0b100=4;0100=64;0x100=369
6).有符号数据表示法。
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
原码 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
六:变量
1)。变量概述
在程序执行的过程中,在某个范围内其值可以发生改变的量
理解:如同数学中的未知数
2)。变量定义格式
数据类型 变量名 = 初始化值;
注意:格式是固定的,记住格式,以不变应万变
3)。Java高级特性:
jdk5.0以后的新特性:
自动 拆装箱
int基本数据类型---->引用类型:Integer
char基本数据类型--->引用类型:Character
A :基本数据类型:
4类八种
a:整数类型:整数类型默认该类型 占字节数 取值范围
byte:字节类型 1 -128~127
short:短整型 2
int:整数类默认该类型 4
long:长整型
b:浮点类型:默认double类型
单精度:float类型 4
双精度:double类型 8
c:字符类型:
char 2
d:布尔类型(逻辑判断上)
boolean 1
布尔类型默认值:false
B :引用类型(面向对象讲)
数组也是引用类型
对于整数类型:
默认的类型:int类型
使用long类型定义变量,在当前变量值的后面加上L或者l(推荐使用L),告诉系统我定义的是一个long类型
浮点类型:默认双精度:double
定义float类型,在该变量值的末尾跟上F或者f
相关代码
public class DataTypeDemo { public static void main(String[] args) { //byte类型
byte b = 100 ;
System.out.println("--------------"); System.out.println(b);
//短整型
short s = 20 ;
System.out.println("--------------"); s = 50 ;
System.out.println("s:"+s);
long l = 1000000000000L;// int i = 1000000000000;
// System.out.println("i:"+i);
double d = 12.56 ; System.out.println("l:"+l);
//浮点类型:默认double类型
System.out.println("d:"+d);
//由于浮点类型存储和整数类型的存储不一致.导致:永远是一个近似值:BigDecimal //单精度
float f = 12.34F ;
System.out.println("f:"+f);
// System.out.println(1.0-0.32);
//char类型
char ch = 'A' ;
System.out.println(ch);
} //boolean类型
boolean flag = true;
System.out.println(flag);
}
1)在java中,定义一个变量不能重复定义
2)建议不要再同一行上定义多个变量
3)定义变量不能以数字开头
目标数据类型 变量名 = (目标数据类型)(值);
强制类型转换的缺点:
会损失精度,不建议强制类型转换!
默认类型提升:
byte,short,char之间不转换,但是一旦参与运算
先提升--->int--->long--->float--->double
例题:面试题
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
public class DataTypeDemo3 {
public static void main(String[] args) {
byte b1 = 3,b2 = 4 ,b ;
// b = b1 + b2 ;//错误的:byte类型不可能接收一个int类型的值
b = (byte)(b1 + b2) ;
b = 3 + 4 ;
System.out.println("b:"+b);
}
}
七:运算符+的几种作用:加法,正数,字符串连接符。
相关代码:
public class OperatorDemo {
public static void main(String[] args) {
//定义两个变量
int x = 3 ;
int y = 4 ;
System.out.println(x+y);
System.out.println(x-y);
System.out.println(x*y);
System.out.println(x/y);
//想让当前结果计算具体的小数,分子都可以乘以浮点类型的数据
System.out.println(x*1.0/y);
System.out.println(x%y);
}
}
扩展的算术运算符:++或者--:循环语句中使用应用场景:
1)单独使用:不管是++或者--在数据前还是数据后都是自增1或者自减1
2)参与运算使用:
a:++,--在数据的前面,先自增1或者自减1,然后在运算(赋值)
b:++,--在数据的后面.先运算(先赋值),然后自增1或者自减1
public class OperatorDemo2 {
public static void main(String[] args) {
//定义两个变量
int x = 3 ;
int y = 4 ;
//进行++,--之前
System.out.println("x:"+x);
System.out.println("y:"+y);
System.out.println("---------------");
//单独使用
//++,--在数据前面
// ++x ;
// --y ;
//++,--在数据后面
// x++;
// y--;
//参与运算
// int c = ++x ;
// int d = --y ;
int c = x ++;
int d = y -- ;
System.out.println("x:"+x);//4,4
System.out.println("y:"+y);//3,3
System.out.println("c:"+c);//4,3
System.out.println("d:"+d);//3,4
}
}
2.赋值运算符=为基本的赋值运算符,其他的为扩展的赋值运算符
相关代码:
public class OperatorDemo {
public static void main(String[] args) {
//定义变量
//1)给定初始化值
int a = 10 ;
//2)先定义,使用该变量之前必须赋值,否则报错
// int b ;
// System.out.println(b);//当前该变量没有被赋值
System.out.println(a);
int m = 100 ;
m += 200;//相当于m = m + 200 ;
System.out.println("m:"+m);
}
}
3。关系运算符注2:比较运算符“==”不能误写成“=” 。
相关代码:
public class OperatorDemo {
public static void main(String[] args) {
//定义变量
int x = 3 ;
int y = 4 ;
int z = 3 ;
//== 不能写出=
System.out.println((x+y)==(x+z));
System.out.println((x+y)==(y+z));
System.out.println("---------------------");
System.out.println(x!= y);
//定量两个变量
int a = 10 ;
int b = 20 ;
boolean flag = (a==b) ;
// boolean flag = (a=b) ;导致类型不匹配
}
}
4.逻辑运算符2)“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
3)异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
public class OperatorDemo {
public static void main(String[] args) {
//定义三个变量
int a = 3 ;
int b = 4 ;
int c = 5 ;
//逻辑单与:&
System.out.println((a>b) & (a>c));
System.out.println((a>b) & (a<c));
System.out.println((a<b) & (a<c));
System.out.println((a<b) & (a>c));
System.out.println("-------------------------------");
//逻辑单或|
System.out.println((a>b) | (a>c));
System.out.println((a>b) | (a<c));
System.out.println((a<b) | (a<c));
System.out.println((a<b) | (a>c));
System.out.println("-------------------------------");
//逻辑异或^
System.out.println((a>b) ^ (a>c));
System.out.println((a>b) ^ (a<c));
System.out.println((a<b) ^ (a<c));
System.out.println((a<b) ^ (a>c));
System.out.println("-------------------------------");
System.out.println(!(a>b));
System.out.println(!!(a>b));
}
}
5。位运算相关代码:
public class OperatorDemo {
public static void main(String[] args) {
//位运算符
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);//(位异或:重点)
System.out.println(~3);
}
}
重点:位异或的另一个特点:一个数据被另一个数据位异或两次,结果是该数据本身!
相关代码:
public class OperatorDemo2 {
public static void main(String[] args) {
//定义两个变量
int a = 10 ;
int b = 20 ;
System.out.println(a ^ b ^ b);
System.out.println(a ^ b ^ a);
}
}
- <<:左移,最左边的最高符号为丢弃,右边补齐0
- >>:右移,最高符号位为0,左边补0,最高符号位为1,左边补齐1
- >>>:无符号右移:不管最高符号位是0还是1,左边补齐0
请用最有效的方式计算出2*8的结果;2<<3
public class OperatorDemo3 {
public static void main(String[] args) {
//特点:该符号左边的数据*2的移动次幂
//3 * 2^2
System.out.println(3<<2);
//特点:该符号左边的数据除以2的移动次幂
System.out.println(24>>2);
System.out.println(-24>>>2);
}
}
6.三目运算符(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
例题:
- 获取两个整数中的最大值
- 获取三个整数中的最大值
- 比较两个整数是否相同
public class OperatorDemo {
public static void main(String[] args) {
//求两个数据是否相等
int a = 100;
int b = 200 ;
//用三元运算符实现
// boolean flag = (a==b) ? true : false;//==表示两个数据进行比较
// System.out.println("flag:"+flag);
//优化改进
boolean flag = a==b ;
System.out.println(flag);
//求两个数据中的最大值
//先定义变量max
int max = (a>b) ? a : b ;
System.out.println("两个数据中的最大值是:"+max);
System.out.println("-----------------------");
//求三个数据中的最大值
int m = 10 ;
int n = 50 ;
int z = 20 ;
//可以使用中间第三方变量进行实现,实际开发中就使用第三方进行实现
// int temp = (m>n) ? m : n ;
// //定义max2
// int max2 = (temp > z) ? temp : z ;
//一步走:
int max2 = (m>n) ? ((m>z)? m: z) : ((n>z)? n: z) ;//不建议使用
System.out.println("三个数据中的最大值是:"+max2);
}
}
7.键盘录入我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。
2)。如何实现键盘录入数据呢?(目前先记住使用)
导包(位置放到class定义的上面) import java.util.Scanner;快捷键:ctrl+shift+o
创建对象 Scanner sc = new Scanner(System.in);
接收数据 int x = sc.nextInt();
相关代码:
public class ScannerDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//录入数据
//提示
System.out.println("请您输入一个数据:");
int a = sc.nextInt();
//输出
System.out.println("您输入的数据是:"+a);
}
}
练习题:public class ScannerTest {
public static void main(String[] args) {
//1)创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//2)录入数据
//提示
System.out.println("请输入第一个数据:");
int firstNumber = sc.nextInt() ;
System.out.println("请输入第二个数据:");
int secondNumber = sc.nextInt() ;
//定义个最终变量
int result = firstNumber + secondNumber ;
System.out.println("result:"+result);
}
}
2.键盘录入三个数据,获取这三个数据中的最大值3.键盘录入两个数据,比较这两个数据是否相等
public class ScannerTest2 {
public static void main(String[] args) {
//1)创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//2)录入 数据
System.out.println("请输入第一个数据:");
int a = sc.nextInt() ;
System.out.println("请输入第二个数据:");
int b= sc.nextInt() ;
System.out.println("请输入第三个数据:");
int c = sc.nextInt() ;
//使用中间第三方变量,并且使用三元运算符
int temp = (a > b) ? a : b ;
//定义最大值变量
int max = (temp >c) ? temp :c ;
System.out.println("三个数据中的最大值是:"+max);
System.out.println("-----------------------------");
//键盘录入两个数据,比较这两个数据是否相等
//录入数据
System.out.println("请输入一个数据:");
int m = sc.nextInt() ;
System.out.println("请输入另一个数据:");
int n = sc.nextInt() ;
//定义变量
boolean flag = (m==n) ? true : false ;
System.out.println(flag);
System.out.println("------------------------------");
//方式2:
boolean flag2 = m==n ;
System.out.println(flag2);
}
}