Java是一门编程语言 主设计者是James Gosling Oak(Java的前身 1991出现)
jdk发展过程
jdk1.0 1995年推出 标志着Java正式进军Internet的开始
jdk1.2 1998年推出 提供了大量的轻量级组件包,从而避免了对Windows平台的依赖 Java改名为Java2
... ...
1、简洁有效 2、可移植性(通过jvm) 3、面向对象 4、解释型 5、适合分布式计算
6、拥有较好的性能 7、健壮、防患于未然 8、具有多线程处理能力 9、具有较高的安全性
10、是一种动态语言 11、是一种中性结构
计算机高级语言类型主要有编译型和解释型两种,Java是两种类型的集合。
Java中处理代码的过程:
Hello.java文件 --编译-->Hello.class文件(字节码文件)--解释-->机器语言(二进制代码)Hello
下载Java jdk1.8 下载地址:Oracle官网 http:www.oracle.com
配置jdk环境变量:
设置流程为:选择【计算机】--右键-->【属性】 选择【高级系统设置】对话框 选择【高级】选项卡 单击【环境变量】按钮,打开【系统变量】对话框,在【变量值】文本框的最后加上路径,进行path变量信息编辑。
模板如下:
path
E:\Java\jdk1.8.0_74\bin;
简单配置好之后可以在命令行 输入Javac命令进行测试;
注:javac.exe是Java本身提供的编译命令,主要目的是用来将*.Java文件编译成*.class文件。
结论一:
(1)public class 定义要求文件名(*.java中的*号)与类名保持一致,而在*.java文件中只允许有一个public class定义。
(2) class定义的类文件名可以与类名称不一致,但在编译之后每一个使用class声明的类都会生成一个*.class文件,即一个Java文件可以产生多个class文件。
注意:类名称要求每个单词的首字母大写 ,例如Hello Demo。
Classpath主要指的是类的运行路径。
常见的面试题:请解释path和classpath的区别?***
· path:是操作系统的环境属性,指的是可以执行命令的程序路径;
· Classpath:是所有*.class文件的执行路径,Java命令执行时将利用此路径加载所需要的*.class文件。
1、Java实现可移植性靠的是Jvm,Jvm就是一台虚拟的计算机,只要在不同的操作系统中植入不同版本的Jvm,那么Java程序就可以在各个平台上移植,做到”一次编写,处处运行“。
2、Java中程序的执行步骤为:
(1) 使用javac将一个*.Java文件编译成*.class文件。
(2) 使用Java可以执行一个*.class文件。
3、每次使用Java命令执行一个class的时候,都会启动Jvm,Jvm通过class path给出的路径加载所需要的类文件,可以通过set classpath 设置类的加载路径。
4、Java程序主要分为Java Application 和Java Applet 程序两种。Java Applet主要是在网页中嵌入的Java程序,基本上已经不再使用了;而Java Application 是指有main()方法的程序;
public class TestJava{
public static void main(String [ ] args){ //Java操作的一个简单范例
int num = 10; //定义一个整形变量num
num = 30; //改变变量的内容
system.out.println("num的内容是:"+num); //输出变量的内容
}
}
注释概述:用于解释说明程序的文字,提高程序的阅读性,可以帮助我们调试程序。
Java中注释分类格式:
· 单行注释:
格式://注释文字
· 多行注释:
格式:/*注释文字*/
注意:多行注释不可以嵌套使用,单行可以。
· 文档注释:被Javadoc工具解析生成一个说明书,面向对象部分讲解。
格式:/**注释文字*/
说明:用这种方法注释的内容会被解释成程序的正式文档,并能包含进如javadoc之类的工具生成的文档里,用以说明该程序的层次结构及方法。
先写注释 再写代码;
/*
需求:我准备写一个Java程序,把“helloWorld”这句话输出在控制台
分析:
A:要写一个Java程序,必须定义类
B:把数据能出输出,说明我们的程序是可以独立运行的,而程序要独立运行,必须定义main方法
实现:
A:Java语言提供了一个关键字:class用来定义类,后面跟的是类名
B:main方法的格式是固定的:
publicstatic void main(String [ ]args){
}
C:输出语句的格式是固定的;
System.out.println("HelloWord");
"HelloWorld"这个内容是可以改变的
*/
-*-*-* -*-*-*-*-*-*-yqy*-*-*-*-*-*-*-*-*-*-*-
//这是我的HelloWorld案例
class HelloWorld{
/*为了程序能独立运行,定义main方法
main方法是程序的入口
被jvm自动调用
*/
public static void main(Sting [ ]args){
System.out.println("HelloWord");
}
}
2.3 Java中的标识符
· 标识符概述:
就是给类、接口、方法、变量等起名字时使用的字符序列;
组成规则:
英文大小写字母 数字字符 $ 和 _
a、不能以数字开头;
b、不能使Java中的关键字;
c、区分大小写;
· 关键字:被java语言赋予特定含义的单词。
· 特点:组成关键字单词的字母全部小写。
Java中的关键字
注意:
1. 虽然goto、const在Java中没有任何意义,却也是保留字,与其他的关键字一样,在程序里不能用来作为自定义的标识符。
2. 对于true、false、null、虽然不是关键字,但是却作为一个单独标识类型,所以也不要直接使用。
3. 对于assert和enum关键字是Java中新增的内容,assert是在jdk1.4的时候新增的,enum实在jdk。5之后增加的。
4.类似于Notepad++这样的高级记事本,针对关键字都有特殊的颜色标记。
/*
class KeyWordDemo {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
*/
常见的命名规则:见名知意;
1)包:其实就是文件夹 ,用于把相同的类名进行区分
单级:pangxie
多级:cn.itcast
cn
itcast
注意:包名都是小写;
2)类或者接口:
一个单词:单词的首字母必须大写
举例:Student Dog
多个单词:每个单词的首字母必须大写 骆驼
举例:HelloWorld
3)方法或者变量:
一个单词:单词的首字母必须大写
举例:main age
多个单词:从第二个单词开始,每个单词的首字母必须大写
举例:studentAge
4)常量:
一个单词:全部大写
举例:PI
多个单词:每个字母都大写
举例:STUDENT_MAX_AGE
2.6 常量:
概述:在程序执行过程中,其值不发生改变的量。
分类:
A:字面值常量
B: 自定义常量
(1):字符串常量 用双引号括起来的内容。
举例:"helloworld"
(2):整数常量 所有的整数
举例:100
(3):小数常量 所有的小数
举例:10.23
(4):字符常量 用单引号括起来的内容
举例:'a'
(5):布尔常量 比较特殊
举例:true false
(6):空常量
举例:null
二级制:逢二进一
八进制:逢八进一
十进制:逢十进一
十六进制:逢十六进一
如何限定呢?用数据类型。
b:我们在运算的时候,不可能是拿着这个空间去运算,我们真正运算的时使用的是该空间中的值,我们就给该空间起一个名字。 变量名
c:即便你有数据类型了,你有变量名了,但是如果没有值,这个变量这个空间就是一个垃圾空间,没有任何意义;初始化值
数据类型 变量名 = 初始化值;
Java语言是强类型语言,对于每一种数据都定义了明确的具体数
据类型,在内存总分配了不同大小的内从空间。
数据类型分类:
A:基本数据类型;
B:引用数据类型(类,接口,数组)
(1)整数
类型 字节数 范围
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个字节
double 8个字节
char 2个字节
true 2个字节
false 2个字节
注意:
整数默认为int类型 长整型后缀用L或者l标记。建议使用L;
浮点数默认是double类型 单精度浮点数用F或者f标记。建议使用F。
1、作用域:
变量定义在哪个大括号内,它就在这个大括号内有效。
并且,在同一个大括号内不能同时定义同名的变量。
2、初始化值:
没有初始化值的变量不能直接使用
你只要在使用前给值就行,不一定非要在定义的时候立即给值。推荐在定义的时候就给值。
定义变量的格式:
a:数据类型 变量名 = 初始化值
b: 数据类型 变量名;
变量名 = 初始化值;
3、在一行上建议只定义一个变量
也可以定义多个,但是不建议
特别注意:boolean不能转换为其他类型
默认类型转换(从小到大)
2.强制类型转换:
强制转换:从“大”的数据类型 到“小”的数据类型
强制转换格式:
目标类型 变量 = (目标数据类型)(被转换的数据)
注意:不要随意的使用强制转换,因为它隐含了精度损失问题。
1:请问下面这个有没有问题?
double d = 12.345;
float f = d; 错误;
//把double赋值给float,加了强制类型转换
double d =12.345;
float f = (float) 12.345; 正确;
2:看看下面两个定义有没有什么区别?
float f1 = (float)12.345;
float f2 = 12.345F;
f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。
byte b1 = 3,b2=4,b;
b=b1+b2; //这个是类型提升,所以有问题
b=3+4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错
哪句是编译失败的呢?为什么呢?
第一句编译失败,因为b1+b2是int型 而b是byte型 不能把int赋值给byte型。
因为变量相加,会首先看类型问题,最终把结果赋值的时候也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值类型的范围内,如果是在就不报错,不在才报错。
byte=130;有没有问题?如果我想赋值正确,可以怎么做?结果是多少呢?
因为byte的范围是:-128~127。
而130不在此范围内,所以报错。
byte = byte(130);使用强制类型转换。
强制类型转换溢出后的结果怎么算?
分析过程:
我们要想知道结果什么,就应该知道是如何进行计算的。
而我们又知道计算机中数据的运算都是补码进行的。
而要得到补码,首先要计算出数据的二级制(原码)。
A:获取130这个数据的二进制。
00000000 0000000 0000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型。
10000010
这个结果是补码。
C:通过已知补码求其原码。
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
所以输出结果为-126
练习:byte b = 300;
/*
看程序写结果
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串连接符。
通过字符和一个整数相加,看ASCII表
'a' 97
'A' 67
'0' 48
*/
system.out.println("hello"+'a'+1);//helloa1
system.out.println('a'+1+"hello");//98hello
2019/07/28 19:08
(1)被Java语言赋予特定含义的单词
(2)特点:
全部小写。
(3)注意事项:
A:goto和const作为保留字存在。
B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记。
(1)就是给类,接口,方法,变量等起名字的字符序列
(2)组成规则:
A:英文大小写字母
B:数字
C:$和_
(3)注意事项:
A:不能以数字开头
B:不能使Java中的关键字
C:区分大小写
(4)常见的命名规则(见名知意)
A:包 全部小写
单级包:小写
举例:liuyi,com
多级包:小写,并用.隔开
举例:cn.incast,com.baidu
B:类或者接口
一个单词:首字母大写
举例:Student,Demo
多个单词:每个字母的首字母大写
举例:HelloWorld,StudentName
C:方法或者变量
一个单词:首字母小写
举例:name,main
多个单词:从第二个单词开始,每个单词首字母大写
举例:studentAge,showAllName()
D:常量
全部大写
一个单词:大写
举例:PI
多个单词:大写,并用_隔开
举例:STUDENT_MAX_AGE
(1)就是对程序进行解释说明的文字
(2)分类:
A:单行注释://
B:多行注释:/**/
C:文档注释:/** */
(3)把HellWorld案例写了一个带注释的版本。
后面再写一个程序的过程。
需求:
分析:
实现:
代码体现:
(4)注释的作用
A:注释说明程序,提高了代码的阅读性。
B:可以帮助我们调试程序。
(1)在程序执行过程中,其值不发生改变的量
(2)分类:
A:字面值常量
B:自定义常量
(3)字面值常量:
A:字符串常量 "hello"
B: 整数常量 12,35
C:小数常量 12.345
D:字符常量 'a' ,'A', '0'
E:布尔常量 true false
F:空常量 null
(4)在Java中针对整数变量提供了四种表现形式
A:二进制 由0,1组成。 以0b开头。
B:八进制 由0,1, ...7组成。 以0开头。
C:十进制 由0,1,...9组成。 整数默认是十进制。
D:十六进制 有0,1,...9,a,...f(大小写均可)组成。 以0x开头。
(1)其他进制到十进制
(2)十进制到其他进制
(3)进制转换的快速转换法
(1)在程序的执行过程中,其值在某个范围内可以发生改变的量
(2)变量的定义格式:
A:数据类型 变量名 = 初始化值;
B:数据类型 变量名;
变量名 = 初始化值;
(1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
(2)分类:
基本数据类型:4类8种
引用数据类型:类,接口,数组。
(3)基本数据类型:
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数:
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。
(1)boolean类型不参与转换
(2)默认转换
A:从小到大
B:byte,short,char -- int --long --float --double
C:byte,short,char之间不相互转换,直接转成int烈性参与运算。
(3)强制转换
A:从小点的到大的
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型)(被转换的数据)
数据类型中补充的几个知识点
1:在定义Long后者Float类型变量的时候,要加L或者F。
整数默认是int类型,浮点数默认是double类型。
byte,short在定义的时候,他们接收的其实是一个int类型的值。
这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。
2:byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
byte的范围:-128~127
128:10000000
-128:1000000(这里的1既是符号位,也是数值位)
3:数据类型转换之默认值转换
byte,short,char -- int --long --float --double
long:8个字节
float:4个字节
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围更大。
long:2^63-1
float:3.4*10^38>2*10^38>2*8^38=2*2^3^38=2*2^114>2^63-1
4:Java语言中的字符char可以储存一个中文汉字吗?为什么呢?
可以。因为Java语言中的字符占用两个字节。
Java语言采用的是Unicode编码。
2019/07/28 19:19