一:java语言简介
1.java语言地发展过程2.java语言平台版本
javase:标准版 是为开发普通桌面和商务应用程序提供的解决方案,这个技术是其他两个的基础,可以做一些桌面程序的开发
javame:小型版 是为了开发电子产品和嵌入式设备提供的解决方案(基本不用)
javaee:企业版 是为开发企业应用程序提供的一套解决方案
3.java语言的特点:
简单:
面向对象:
来源:
分布式处理:
安全:
健壮:
跨平台:(跨操作系统)
4.java语言跨平台的原理
java语言是通过不同的jvm跨平台的,jvm不跨平台
5.跨平台:
通过Java语言编写的应用程序可以在不同的操作系统上运行
原理:
只要在需要运行java程序的系统上安装一个对应的java虚拟机(jvm:java Virtrual Machint)
由jvm来负责java程序在这个系统中的运行
6.jdk和jre:
jre(Java runtime environment java运行环境)
包含java虚拟机jvm,java程序所需的核心类库等,如果我们想要运行一个开发好了的java程序,只需要安装jre就可以了
jdk(Java development kit java开发工具包)
jdk是提供给java开发者使用的,包含java的开发工具,还有jre,所以安装了jdk,就不需要在单独安装jre了
开发工具包(编译工具 javac.exe 运行java.exe 打包工具 jar.exe等等。。。)
使用jdk开发java程序,交给jre去运行。
7.jdk的下载,安装和卸载
通过官网可以获取jdk
http://www.oracle.com
针对不同的操作系统,有不同的版本
jdk的安装:一路下一步即可(安装路径中不要有中文或一些特殊符号)
8.使用记事本写一个小案例
定义一个类 class 类名
在类名后加{}
在{}中添加主方法 public static void main(String[] args){}
在主方法的{}中写一句输出语句 System.out.println(“Hello World”);
编写完java代码,改后缀为.java
在命令行中输入javac命令对源代码进行编译,生成字节码文件 后缀是.class
编译时,如果没有报错就证明编译成功,输入java命令对class字节码文件进行执行
执行时不需要添加.class后缀
文件名跟类名一致,避免不必要的麻烦。全部用英文
9.环境变量的配置
java程序的执行需要使用外部指令javac和java,但是javac和Java命令在jdk的安装在目录下的bin目录中,所以我们要想使用这两个命令需要进入到bin目录,并且还要把我们写的java代码也放入这个目录中。
程序开发过程中,不可能把我们写的所有源代码都放到bin目录中,我们可以将源代码存放到任意我们想存放的位置,所以需要让这个javac和java命令能在任意路径下执行
path环境变量的配置和作用
进入到jdk的安装路径下(不要进bin目录)把这个路径复制下来,点击我的电脑右键属性–选择高级系统设置–环境变量–系统变量上点击新建–在变量名位置输入JAVA_HOME
在变量值的位置输入刚复制的路径–点击确定–在系统变量中找到path–选择编辑–新建–输入%JAVA_HOME%bin–点击确定(把这个环境变量放到所有环境变量的最前面)
10.需要掌握的内容:
dos命令
jdk,jre,jvm的作用以及它们之间的关系
jdk的下载,安装和卸载
java语言最基本的单位是 类 class 类名{}
在类中写代码的时候,写在{}中
程序要想能够运行,必须有main(主)方法的{}中
每一句代码结束后都要以分号结尾
输出一句话:System.out.println(“今天好热”);
“”里面的内容可以随意写。
二:java基础语法
1.关键字:
被java语言赋予了特殊含义的单词
-特点:
组成关键字的单词全部是小写
-goto和const作为保留字
-像notepad++,editplus等这样的高级记事本,对关键字有一个颜色区分
2.标识符(一定要见名知意!!!)
-就是给类、接口、方法、变量等等起名字时使用的字符。
-组成规则:
英文大小写字母、数字、$、_等(注:不能以数字开头、不能是java中的关键字、区分大小写)
-给类起名字的时候要求必须 见名知意 (eg:class Student{}、class SuperMan{})
-包起名字(包:实际就是文件夹):分开存储不同的类、用来把相同的类名进行区分
包名全部小写-单机包(只有一个文件夹) -多级包(俄罗斯套娃)
-类,接口起名时:
若是一个单词:单词首字母必须大写
若是多个单词组成的,每个单词的首字母都必须大写
-方法、变量命名时:
若是一个单词,全小写
若是多个单词组成的,从第二个单词开始,每个单词的首字母大写(eg:stuName)
-常量命名时:
若是一个单词,全大写(eg:PI)
若是多个单词组成的,每个单词的每个字母都大写,每个单词之间用_隔开(eg:MAX_AGE)
-常用命名法:(业内一般用驼峰命名法,即1和2)
1.大驼峰命名法(帕斯卡命名法)----->驼峰命名法 String UserName = "小明";ps:大驼峰命名法每个单词的首字母都需要大写,一般用于类,常量、接口的命名。2.小驼峰命名法(驼峰命名法)-----》驼峰命名法 String userName = "小明";ps:第一个单词的首字母小写,后面其他单词的字母大写,一般用于变量 方法的命名。3.前缀命名法 String mUserName = "小明";ps:一般前缀加m,m小写其他字母大写,一般用于变量 方法的命名4.程序员命名法(下划线命名法) String user_name="小明";ps:每个单词的每个字母都小写,单词与单词中间使用_分隔,一般用于变量 方法的命名。123456789101112
3.注释:
用来解释说明程序的文字,可以提高程序的阅读性;可以帮助我们调试代码
-java中注释的分类和格式
单行注释://注释文字
多行注释:/注释文字/ (不能嵌套)
文档注释:/*注释文字/ (可以被javadoc命令解析生成一个说明书)
单行注释和多行注释,被注释的内容,不会被jvm执行
对于文档注释,是java中特有的一种注释,其中的内容可以被jdk提供的javadoc命令所解析,可以生成一套网页形式体现的说明该程序的说明书
4.常量:
-定义:在程序执行过程中,其值不可以发生改变
-分类:a.字面值常量
字符串常量 “”用“”引起来的内容 “你好” “true”
整数常量 所有整数
小数常量 所有的浮点数
字符常量 ‘’ 用‘’引起来的单个内容 ‘a’ ‘发’
布尔常量 ture fasle
空常量 null
(java中整数常量有4种表现形式:2,8,10,16进制 1byte=8bit 1k=1024byte 1M=1024k 1G=1024M 1T=1024G)
b.自定义常量
5.变量:
-定义:在程序执行过程中,其值可以在某个范围内发生改变的量
-变量的定义格式:
数据类型 变量名=初始化值;
格式化是固定的 int studentAge=18;
-从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域。
所以,每一个变量使用前必须要先声明,然后必须进行复制,才能够使用。
-为什么要定义变量?用来不断的存放同一类型的常量并且可以重复的使用。
三,数据类型
a.基本数值类型(4类8种) 数值型:整数类型 字节数 取值范围 byte 1 -128~127 short 2 -2^15~2^15-1 int 4 -2^31~2^31-1 long 8 -2^63~2^63-1 浮点类型 float 4 -3.403E38~3.403E38 double 8 -1.7976E308~1.7976E308 字符型: char 2 布尔型: boolean 1 (整数默认是int类型,浮点数默认是double类型;长整型后面要用L或l标记,建议使用L;单精度浮点数要用F或f标记,建议使用F) b.引用数据类型 类 class 接口 interface 数组 [ ] java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中占用的内存空间大小不同 使用变量时的注意事项: -作用域:变量定义在哪一对{}中,那个{}的范围就是我们定义的变量的作用域。 同一个作用于范围内不能定义2个同名的变量。 没有初始化值的变量不能直接使用,只要在使用前给了值就可以,不一定非要在定义的时候就给值 一行建议只定义一个变,一般定义局部变量直接赋初始值。123456789101112131415161718192021
四:运算符
1.“+”是一个运算符
作用:正好;做加法运算;当+遇到字符串时就变成了连接符,把两个值连起来
一般情况下,我们在运算的时候,要求参加运算的数据类型要一致(注意:boolean[true fasle]类型不能转换为其它的数据类型)
类型转换:
a.默认类型转换(从小到大的转换)
byte,short, char-------int-------long-------float-------double byte, short, char 之间不转换,参与运算时都先转换为int
b.强制类型转换(从大到小的转换)
格式:目标类型 变量名 = (目标类型)(要被转换的数据);
***:不要随意的使用强制转换,因为它有可能会损失精度
2.问题:
double dou = 11.11; float f = dou ; 错误,类型不兼容12
float f = 11.11F; float ff = (float)11.11; 二者有区别,f就是一个float类型。ff是通过一个double类型强转的 byte b1 = 3,b2 = 4,b3; b3 = b1+b2; b3 = 3+4; 问编译时哪句会报错?为什么? 第二句会报错,不兼容的类型:从int转换到byte可能会有损失。 变量相加,先看类型(byte---int),最后赋值的时候也会看类型(结果int) 第三句,常量相加,先做加法运算,然后看结果是否在要赋值的数据类型的范围内,如果不在范围内,才会报错。 问:byte b = 130;有没有问题?如果想让赋值正确该怎么办? 有,因为byte的取值范围是-128~127,130不在范围内,超范围了,所以报错,使用强制转换可以使其不报错,但是结果会有问题。最后结果是-126. byte b = (byte)234;的结果是? 答: 234的二进制是: 00000000 00000000 00000000 11101010 因为它是正数,所以原码、反码、补码都一样 强制转换成byte类型,就要进行截取操作 符号位 数值位 补码: 1 1101010 这个结果是补码 反码: 1 1101001 原码: 1 0010110 所以最后结果是-22123456789101112131415161718192021
3.ASCII码表:
在这个码表中每个字符都对应一个固定的十进制数
‘ a‘ 97
’A‘ 65
’0‘ 48
字符串和其他任意数据做+,+都是连接符,结果都是字符串类型
**4.运算:**对常量和变量进行操作的过程叫做运算
5.运算符:对常量和变量进行操作时使用的那个符号就叫运算符
6.运算符的分类:
-算术运算符:
+ , - , * , / , % , ++ (a:就是对 变量 进行自增或自减 b:参与运算使用,放在变量前和变量后效果是不一样的)
-赋值运算符:
= 、 +=、 -=、 *= 、 /= 、 %=
=:最基本的赋值运算符,把=右边的赋值给左边
*其他都是扩展出来的,把=左边的值和右边的值先运算,然后把运算结果赋值给左边。扩展运算符隐含了强制类型转换
面试题:
下面的代码有没有问题,如果有,问题在哪里?
short s = 1; s = s+1; //错误: 不兼容的类型:从int转换到short可能会有损失short s1 = 1; s1 +=1等价于 s = (s的数据类型)(s+1); //正确:12
-比较运算符(关系运算符):
== 、 != 、 < 、 <= 、 > 、 >=、 instaceof(判断是否是类的对象 eg: “abc”instaceof true)
比较运算符的结果都是boolean类型,true 或者 false
-逻辑运算符:
& 与(有假则假) | 或(有真则真) ^ 异或(相同为假,不同为真) !非(非真则假,奇数取反,偶数不变)
&& 短路与 ||短路或(双与和双或和单与和单或的结果一样,但&&有短路的效果,左边为假时,右边就不执行了,因此在开发运算时,双与和双或用的多一些)
是用来连接boolean类型表达式的,比如我们要在Java代码中表达这样一个关系: 22
表达式:就是用运算符把常量或者变量连起来的符合java语法的式子
a+b 算术表达式
a==b 比较表达式
-位运算符:
<>右移(最高位是0,左边补0;最高位是1,左边补1) >>>无符号右移(左边都补0)
&与运算 |或运算 ^异或运算(一个数对另一个数异或运算2次.数不变 ) ~反码
位运算是直接对二进制进行运算的符号,要做位运算,要先把数据转换成二进制。
面试题:
请实现两个整数变量的交换:
class Demo{public void main(String[] args){int a = 5;int b = 6;int c;c = b;b = a;a = c;System.out.println("a="+a+";b="+b);}}1234567891011
请使用最快的方式写出计算2*8的结果:2<<31
-三元(目)运算符(int or boolean类型):
格式:关系(比较)表达式?表达式一:表达式二; (如果条件为真,运算后的结果就是表达式一的值;反之位表达式二的值)
7.运算符的优先级:(从高到低顺序)
括号 {} ()
正负号 + -
自增自减 ++、—
乘除取余 * / %
加减法 + -
位移运算符 << >> >>>
大小 < <= > >=
判断是否相等 == !=
…
因为()优先级高,所以在程序中如果需要改变一些运算顺序就可以使用括号。
五:键盘录入
1.目前我们写的程序,数值都是固定的,但是实际开发中,数值肯定是变换的,所以,我们要把数据改为用键盘输入,提高程序的灵活性
2.怎么实现键盘录入数据呢?
-导包(注意:导包语句放在class之前) 格式: import java.util.Scanner; -创建对象 格式:Scanner sc = new Scanner(System.in); -接收数据 int i = sc.nextInt();