java基础-简单归纳
1.java虚拟机——JVM
1.1JVM:java虚拟机,简称JVM,试运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特性之一。
跨平台:用java编写的软件可以在任何的操作系统上运行,java语言的跨平台特性。
2.编译
2.1编译源文件(把人认识的源码转换为jvm能够认识的字节码,*.class)。
2.2编译就是把源码翻译成机器码的过程,翻译有两种方式。
(1)解释方式:像口语翻译,读一句翻译一句,也就是机器读一行执行一行。
(2)编译方式:像书面翻译,把所有内容一次性翻译成目标代码,目标代码会对应一份文件也就是可执行文件,最后把可执行文件交给计算机执行。如C语言
(3)对于java语言的程序,它包含了以上两种方式,把源码转换为字节码时为编译方式;把字节码交给jvm执行的过程是解释方式。
后期的高版本的jvm,在执行字节码的过程中,为了加快执行的速度,会把代码中一部分(执行频率高)在内存中进行编。
编译文件用到的命令是javac。
2.3执行字节码,也就是执行java程序的过程。首先把字节码加载到内存,然后进行初始化(为各种变量和常量及方法)分配内存空间,找到程序的入口(main()方法),调用入口方法开始执行,在整个执行过程中,依据程序使用的空间,不断地分配内存给程序使用,同时也定期或不定期进行垃圾回收(释放掉不再使用的内存,这些内存可以重复使用)。
3.java语言基本特征
3.1面向对象编程方式。以前的语言(例如C语言)采用面向过程的方式,面向过程的方式不适应于大型项目的开发,在这种情况下程序会非常复杂,难以维护。面向对象可以自定义类型,他可以很好的描述客观事物,更接近于人类的自然思维方式。
3.2跨平台运行。这是java一直追求的目标,也是java语言不同其他语言之处。同一份字节码可以在不同的操作系统平台上执行,原因在于java给不同的操作系统打造了不同的JVM。java 的口号,一次编写,四处运行。
4.java的关键内容
4.1注释
==//==单行注释,只能注释一行
==/*==a
d ==*/==多行注释,一次可以注释多行
/**
*文档 文档注释,属于多行注释,区别在于多一个 *,写在方法前
*文档注释的内容可以被java doc工具生成为API文档的一个部分, 所以文档注释一般出现在类的前面,出现在方法前面。文档注释有一些可用的关键字,比如作者,版本,日期等。
*/
// 以上注释可以用在类文件任何地方
4.2关键字
是指在程序中,java已经定义好的单词,具有特殊含义,用户不能更改,也不能创建。不同的关键字在程序中的作用是不一样的,比如class表示一个类,interface表示一个接口,null表示空值等。java现在一共有五十三个关键字,其中有两个是保留关键字(当前没有任何意义,可能以后会启用,goto,const)。java的所有关键字都是小写。关键字区分大小写。所有关键字都需要学习,在后期学习中逐渐积累。
4.3标识符
是指在程序中,我们自己定义的内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。它与关键字的区别在于一个不能变,一个可变。标识符也区分大小写。
命名规则:
硬性要求
标识符可以包含英文字母26个(区分大小)、0-9数字、¥(美元符号)和_(下划线)。标识符不能以数字开头。标识符不能是关键字。
软性要求
类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
变量名规范:全部小写。
标识符的命名最好具有含义,所以尽量用简单的单词。
4.4常量
表示一份数据,其值不能改变,java是提供一个关键字final,用final修饰一份变量,该变量就成了常量。
出现在代码中的一些写死的数据比如12,3.2,true等也可以理解为常量,有些书本中把它们称为直接量。
出现在代码中的直接量,分别属于什么数据类型,一定要区分清楚。
0后面4.6
4.5变量
常量是固定不变的数据,那么在程序中可以变化的量称为变量。
变量:计算机要进行运算必须能够保持住参加运算的数据,首先数据要进入内存存放在内存中,为了方便找到并使用这些数据,那么必须要对它进行标识,这种标识符所表示的数据就称为变量。变量表示的数据可以在程序执行过程中进行改变,变量一旦改变就使用改变后的值。
变量的使用:1.变量的声明,指明变量的名称及所属的数据类型。基本语法:数据类型 变量名。
2.变量的赋值,把一份数据指定给某个变量去表示,赋值可以改变变量的值。基本语法: 变量名 = 值
规范:java语言是“强类型的语言”,它要求变量必须具有明确的数据类型,主要因为在编译期需要给变量精确的分配内存,也需要确定表达式的精确的结果类型等。
4.6数据类型
就是对程序中所使用数据的分类,数据就是用来表示信息的。作为信息的描述来说,不同种类的信息表达方式是不同的。
数据类型有八个:四个是整数,两个是小数,其它的是字符和布尔。
引用类型三个:分别是类,数组和接口。
java是面向对象的,原本没有基本数据类型,只是代码中有很多数据用基本类型来表示更加简单直接,所以得以保留。但是,所有基本类型的数据都可以用它对应的引用类型(包装类型,java中的八个基本类型有八个对应的包装类型,它们之间可以方便地进行互相转换,这个转换操作表示为“装箱”和“拆箱“。
掌握基本类型的要点在于,各类型占用的字节数,字节数越多表示的范围越大,在执行数据转换过程中,字节数越多就越可能成为转换的目标类型;
各类型数据的表示范围,了解它有利于给不同的数据声明为不同类型的合适的变量。
所有的整数类型都是精确的数字,所有的浮点型都是非精确的。如果计算结果需要精确,必须用整形。
技巧:类型的表示范围不需要死记,因为在包装类型中就包含有各种类型的表示范围。
==int i = 100;==整数的直接量的类型就是int
short s = 100; 这里执行了自动类型转换,在赋值前把int转换为short
==long l = 100;==也执行了自动类型转换,而且不会损失数据(数据溢出);
==long l1 = 4564564546456445L;==不加L为什么不能表示,因为该数超出了int的表示范围,需要在后面加L明确表示它是Long类型;
==float f = 2.5;==不加F为什么会出错,小数的直接量属于double类型,所以需要在后面加上F明确表示是Float类型;
char c = ‘*’;
int h = c;//为什么可以这样传,字符类型内容表示为一份两个字节的整数,这种赋值没有我问题
5.数据类型转换
5.1自动类型转换
把表示范围小的数据转换为表示范围大的数据,java采用的是自动类型转换,这种情况不需要在表达式中明确的指出结果类型。
比如:int i;
short s = 100;
i = s;
如何判断一个表达式计算结果的数据类型?
结果类型 = 表达式中表示范围最大的类型,比如表达式中最大类型是long,结果就是long,最大类型是double,结果就是double。
八大类型从小至大的排列关系:
byte short int long float double
char
5.2强制类型转换
如果把表示范围大的类型数据转换Wie表示范围小的类型的数据,必须进行强制类型转换。强制类型转换的语法:目标类型变量 = (目的类型)源类型变量
比如:long l= 10;int i = 5; i =(int)l;如果是表达式,目标类型变量 =(目的类型)(表达式)
注意:自动类型转换会发生溢出吗?会的,而且编译期不报错。
强制类型转换会发生溢出吗?会的,但是编译器会提前报错。
6.运算符
++ – 可以出现在变量的前面或后面,如果计算结果需要赋值给另一变量,就要注意它的运算顺序。
如果符号在前,则先对变量运算,再赋值,否则先对赋值,再对变量运算。
7.方法
**7.1方法表示类的行为。**类的功能可以通过它具有什么方法来体现,方法名称一般用动词,方法名首字母(小驼峰)。
**7.2方法可以分成两个部分。**第一方法的声明(方法的签名),
基本语法:修饰符[static,final,native等] 返回值类型 方法名(参数列表…)
修饰符又称为权限限定符,规定了方法可被访问的范围,public(公共)任何人都可以访问;private(私有)只能在类的内部访问;protected(保护)类自己访问以及子类可以访问。
返回值类型:规定了方法执行完毕后的结果类型。只要是java的合法类型都可以是方法的返回值类型。如果方法没有返回值,返回值不能省略只能使用void关键字来表示当前方法没有返回值。
参数列表,规定了方法可以接受的参数的类型和个数;方法也可以没有参数。
第二是方法体 { 方法体,一般是一段程序 },如果方法有返回值,必须使用==return 返回值==进行返回。如果方法没有返回值,方法中可以没有return,如果有return,方法执行到return就会终止。
7.3方法的调用:
调用的形式:无返回值的方法直接调用方法名调用,有返回值的方法可以用变量接收返回值(也可能存在类型转换的问题)。
在System.out.print()方法的参数中,不能使用无返回值的方法,如System.out.println(sum1());
7.4方法参数的传递
方法参数的传递方式是传值不是传址。
7.5方法的重载
在一个类中,同名的方法可以有多个,但是参数的个数,类型,顺序不相同,符合这种情况的方法就称为方法的重载。
8.流程控制语句
8.1java程序的执行流程只有三种
a.顺序执行,按照代码的先后顺序逐条执行。
b.分支执行,依据指定的条件,去执行相应的某块代码。
c.循环执行,依据循环条件是否成立,反复的执行某块代码。
**注意:**53个关键字中有goto语句,它作为保留关键字,没有具体含义。C语言中goto语句可以让代码任意的跳转执行,但是可能会造成流程的混乱。
条件选择语句
if(条件){ } 单分支判断语句,满足条件执行,不满足就不执行。条件可以是逻辑表达式(只使用逻辑运算符),条件表达式(使用条件运算符),也可以是boolean类型的常量或变量。
if( ){ }else{ } 双分支选择语句,满足条件执行前一块的代码,不满足执行后一块代码。
if( ){ }else if(){ }…else{ } 多分支选择语句,一个语句中可以有多个条件,只要前面的条件符合后面的条件将不再判断和执行。利用双支的选择语句也可以完成多分支的任务。如,if(){}else{ if(){}else{if(){}else{}}},但是这种写法属于嵌套的写法,代码可读性变差。
==switch()==语句, 等值条件判断的多分支选择语句。switch的执行效率高于if else if else。
循环语句
任何循环语句在使用时都要注意三个要素,第一循环变量(可以是任何类型),第二循环终止条件(如果条件满足则执行,否则就退出),第三修改循环变量(当一次循环走完,应当去修改循环变量)。
for循环
按序循环,循环变量按照递增或递减的顺序进行变化,适合于被处理的数据具有确定的顺序的情况,比如数组的遍历。
for循环的三个要素可以出现在不同的位置,但要注意区别,一般没有特殊要求,要按正常的写法写。
while循环
又称为当循环,就是当条件满足就执行, 否则不执行。
循环变量在循环结束后可以继续使用。
如果不能确定循环次数,就可以考虑使用while。
do while()循环
以称为直到循环,循环语句至少会执行一次。这种循环用的比较少,除非循环语句至少要执行一次。
continue和break
这两个关键字都可以用在循环体内,程序执行到continue,那么循环体内后面的语句不再执行,转而执行下一次循环。
程序执行到break,循环体内后面的语句不再执行,马上终止循环。
9.数组
1.数组是最常用的数据类型之一,所有的高级语言都支持这种数据类型。
2.在java中,数组属于引用类型,它的处理机理和使用方式与基本类型的数据有较大的不同。
3.在Java中,对数组有着严格的规范,首先,数组的元素必须是同一类型,其次数组一旦创建,它的长度不可变的(固定长度),数组在内存中按序连续的存放。
4.数组可以存放多个元素,因此可以把数组当作一个容器来看待。集合类型中有List集合,它的内部其实就是一个数组。
5.画一下数组的内存图:检索数据效率最高
9.1数组的使用
-
数组变量的声明,语法:数据类型[] 数组变量。
-
数组的创建,就是在内存中为数组开辟一块区域。Java中有三种方式
例:int [] ar1;声明数组变量,此时数组未创建,并不占用内存
==ar1=new int[10];==在内存中分配了又是个元素的空间给数组,此时我们认为数组被初始化
ar2 = new int[]{1,2,3,4,5};创建时即赋初值,数组的长度就是元素的个数
int[] ar3 = {2,3,6,4,5};直接指定数组元素的初值,数组的长度就是所有元素的个数
for(int j=0;j<ar1.length;j++) {
sysout.out.println(ar1[j]);数组元素的引用
}
-
数组元素的复制,用数组变量[索引] = 值;的语法。
-
引用数组元素,数组变量[索引] 就表示对应元素的值。
-
数组的遍历,就是按照索引的顺序,逐一取同数组元素并使用。因为数组有确定的长度,适合于使用for循环。
-
数组可以作为方法的参数,传参时传递的是数组的地址,因此方法内所使用的数组与方法外创建的数组是同一份数据,那么在方法内对数组的修改,也就是对方法外的数组的修改。在java中,方法的参数是引用类型,
-
数组作为返回值。
-
数组的常见异常
越界异常:代码中使用了数组范围外的索引值
空指针异常:
-
数组的缺点,它的长度在创建后就不能改变,它具有固定的长度。
] = 值;的语法。
-
引用数组元素,数组变量[索引] 就表示对应元素的值。
-
数组的遍历,就是按照索引的顺序,逐一取同数组元素并使用。因为数组有确定的长度,适合于使用for循环。
-
数组可以作为方法的参数,传参时传递的是数组的地址,因此方法内所使用的数组与方法外创建的数组是同一份数据,那么在方法内对数组的修改,也就是对方法外的数组的修改。在java中,方法的参数是引用类型,
-
数组作为返回值。
-
数组的常见异常
越界异常:代码中使用了数组范围外的索引值
空指针异常:
-
数组的缺点,它的长度在创建后就不能改变,它具有固定的长度。
- 在实际编辑过程中,经常会遇到把一组数据存放到数组中进行管理,可是设计时不知道运行时该数组中会存放多少个元素,因此无法确定数组的长度。java中提供一种称为可变的数组类型,它就是ArrayList类。