你这个年龄还能睡得着觉!!!你这个年龄还能睡得着觉!!!你这个年龄还能睡得着觉!!!
一、Java应用程序介绍
(一)、Java应用程序的组成
1、源文件:扩展名是(.java),是由若干个互相独立的类组成,源文件的名字和public类的名字要相同一模一样。一个源文件中不是必须需要public类。
源文件中有很多个类,但是只有一个类是public类,
2、字节码文件:扩展名(.class),编译器编译源文件会生成很多个字节码文件,一个类就是一个字节码文件,字节码文件的名字和该类的名字相同;这些字节码文件和源文件在相同的目录中。
(二)、应用程序的主类public
Java中的主类public必须含有主方法 public static void main(String args[ ]);String args[ ]是一个字符串类型的数组
(三)、习题
1、Java之父——James Gosling
2、开发Java应用程序需要经过哪些主要步骤?
编写源文件——>编译源文件生成字节码(用编译器javac.exe)——>加载运行字节码文件(用解释器java.exe)
二、基本数据类型与数组
(一)、标识符和关键字
1、标识符:说白了就是给类、变量、方法、数组、文件起名字,这个名字有规则;
- 这个名字只能有四个部分组成:字母、数字、下画线、美元符号$
- 名字第一个字符不可以是数字
- 不能是关键字和true、false、null
注意:标识符也是区分大小写的,hello和Hello是不同的标识符
2、Java的50个关键字
(二)、基本数据类型
1、Java有8种基本数据类型:
逻辑类型:boolean、
整数类型:byte-1B(-128~127)、short-2B、int-4B、long-8B(要有后缀L);Java中没有无符号unsigned这个说法。
字符类型:char-2B、有些字符不能通过键盘输入,只能用转义字符:\n 换行、\b退格、\" 双引号……;char类型取值范围0-65535,字符是存储在Unicode表中的,这些字符使用十六进制存储在该表中,一般格式为 "\u****"
浮点类型:float-4B(保留8位有效数字)、double-8B(保留16位有效数字);注意float常量后面必须要有后缀f或F;double后面允许省略后缀
2、类型转换运算-当把一种基本数据类型变量的值赋值给另一个基本类型变量时使用
精度从低到高:byte、short、char、int、long、float、double
把级别低的值赋给级别高的变量--系统自动完成数据类型的转换;相反的--必须使用类型转换运算: (类型名)值 (int)34.34
3、输入、输出基本型数据
(1)、输入基本型数据:Scanner是一个类,使用该类创建的对象可以读取用户在键盘输入的各种基本类型数据:nextBoolean()、nextByte()、nextShort()、nextInt()、nextLong()、nextFloat()、nextDouble();
注意:使用此方法获取输入的数据时,还需要引用 import java.util.Scanner;
import java.util.Scanner;//工具包
Scanner A = new Scanner(System.in);//使用Scanner类创建对象A
int x = A.nextInt();//使用对象A调用函数nextInt()来获取用户输入的数据
(2)、输出基本型数据:使用 System.out.println()--输出数据后可以换行 System.out.print() --输出数据后不换行
输出格式:使用并置符号+变量、表达式等并置 一起输出;如:System.out.println("我是"+sum);
(三)、数组
什么是数组?——数组是相同类型的变量按顺序组成的一种复合数据类型;引用型变量
1、声明数组——给出元素的数据类型 和 数组变量的名字
Java独特的声明方式: 数组的元素类型 [ ] 数组名 —— int [ ] a;
特别的:
int [] a,b;
int a[],b[];//两者等价
int [] a,b[];
int a[],b[][];//$$$$$$$$$注意此时的b数二维数组¥¥¥¥¥¥
注意:Java中的数组不允许声明时中括号【】里面指定元素的个数,int a[12]; 这是严重错误的。
2、为数组分配变量
分配元素的书写格式: 数组名 = new 数组元素的类型[数组元素的个数]—— a = new int[12];
注意:声明数组和分配变量可以一起完成: int a[ ] = new int[12];
3、计算数组的长度length
使用方法:数组名.length
注意:在二维数组应用中计算的是有多少个一维数组,而不是在一维数组使用是计算元素的个数。
4、数组的引用
在输出一维数组 System.out.prinln(a);时 其结果是数组a的地址;特别的当使用相同方法对char类型输出时,输出的是char类型数组里面全部的元素 而不是char类型数组的地址;如果想要输出char类型数组的地址引用,需要使用并置运算System.out.prinln(""+a);
三、运算符、表达式和语句
(一)、Java里面有六类语句
方法调用语句、表达式语句、复合语句、空语句、控制语句、package语句和import语句
(二)、for语句与数组(for each)
为了让for语句更好的遍历数组,新格式: for(声明循环变量 :数组的名字){ …… } 类似自然语言for each;意思就是对于循环变量依次取数组的每一个元素的值;声明循环变量相当于循环多少次的意思。
四、类和对象
类是数据类型,用类声明的变量叫作对象。数据的封装
(一)、区分成员变量和局部变量
当成员变量和局部变量的名字相同时,成员变量被隐藏——即该成员变量在这个方法内暂时失效。如果一定要在该方法中使用被隐藏的成员变量,需要使用this关键字。
局部变量必须赋初值。
(二)、类的UML图
UML图是结构图,一个uml中包含:类、接口、泛化关系、关联关系、依赖关系、实现关系;
UML图共有三层:
第一层——类的名字层,如果名字是常规字形,表明该类是具体类;如果名字是斜体字形,该类是抽象类。
第二层——变量层
第三层——方法层
(三)、构造方法
构造方法是类的一种特殊方法,当出现用类创建对象时需要使用该类的构造方法,构造方法名字与类的名字保持相同且构造方法没有类型(与类名相同的方法但有类型 不是构造方法),一个类中可以编写若干个构造方法;如果没有编写构造方法,系统会默认该类一个空的构造方法。
(四)、创建对象
创建一个对象包括:对象的声明、为对象分配变量
1、对象的声明:类的名字 对象的名字;
2、为对象分配变量:使用new运算符 和 类的构造方法 为声明的对象分配变量——即创建对象;
//创建对象
A a; //声明对象——用类A 声明一个对象a
a = new A(); //为对象分配变量——使用new 和 构造方法;
原理:为对象分配变量在计算机内部的工作过程:当计算机看见 new 构造方法
- new运算符为类中的成员变量分配内存空间
- 接着执行构造方法中的语句
- new运算符在分配空间后将计算出一个十六进制的数,该数就是这个对象的引用——即该对象的地址;即 new 构造方法——new A() 是一个值
- 把该值赋值给变量对象a
注意:分配给对象的变量称作实体
特点:Java有“垃圾收集”机制,作用就是释放已经没有被使用的实体的空间;相当于C++语言里面的析构函数。
3、对象的组合与复用
一个类可以把某个对象作为自己的一个成员变量,如果用这样的类创建对象,那么该对象中就会有其他对象,那么该对象就可以委托类里面的对象调用它的方法。
衍生出类的关联关系和依赖关系UML图:上面两个组合对象就是关联关系;若A类中的某个方法的参数是B类声明的对象,两者是依赖关系。
(五)、实例成员和类static成员
1、实例变量和类变量
类变量的原理和特点:使用static关键字修饰;
- 不同对象的实例变量互不相同——前面已经知道使用new运算符可以创建多个不同的对象,这些对象也都各自获得了不同的成员变量,每个对象的成员变量都有自己的内存空间,就算改变其中一个对象的实例变量也不会影响其他对象的实例变量。
- 所有对象共享类static变量——如果一个类有static类变量,当该类创建了多个对象时,这些对象也获得了该类的static类变量,但是这些对象的这个类变量占有相同的一处内存,即只存在那么一个类变量,只是被所有对象共同使用罢了,当改变其中一个对象的这个类变量也会影响其他对象的这个类变量。
- 内部工作过程——当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类中的实例变量都不会被分配内存;但是,类中的static类变量在该类加载到内存时,就会被分配好内存空间。当该类创建对象时,不同对象分配不同的实例变量内存空间;而类变量不再重新分配内存,类变量的内存空间直到程序退出运行才释放占用的空间。
- 类可以调用类变量
2、实例方法和类方法
- 类static方法在该类加载到内存时,就会分配相应的入口地址,从而类方法不仅可以被对象调用,也可以直接由类名调用
- 类方法不可以操作实例变量,因为实例变量是创建对象后才有内存空间,而类方法不可能调用没有被分配内存空间的实例变量
- 当创建对象后,类中的实例方法才分配入口地址,从而创建的对象才能调用实例方法,实例方法只创建一个入口地址,当再创建第二个对象时,不再分配入口地址。
(六)、方法重载
方法重载是多态的体现,Java中有两种多态:方法重载和方法重写;重写与继承有关;
方法重载的意思:一个类中可以有多个方法具有相同的名字,只是参数个数不同,和个数相同但参数类型不同
方法重写的意思:子类中定义一个方法,这个方法的名字、参数个数、参数的类型和父类的方法完全相同。重写的目的:子类通过方法的重写可以隐藏继承的方法,
(七)、包 package语句
作用:用来区分名字相同的类;
问题根源:不同的Java源文件中可能出现名字相同的类,为了区分这些类就需要使用包名;可以通过隶属于不同的包来相互区分。
package语句作为Java源文件的第一条语句——指明该源文件定义的类所在的包。
(八)、import语句
问题根源:如果一个类想要用的其他类和它不在同一个包中,可以使用import语句引入需要的包中的类和接口。
如果用户需要类库中的类,就必须使用import语句;import语句在package语句和源文件中类的定义之间。Java提供了130多个包,每一个包中有许多的类。
使用:import java.util.*; 代表引入util包中的全部类;
(九)、对象数组
数组里面的元素是对象
五、子类和继承
继承和多态
重点:面向抽象编程
详细讲解:
六、接口与实现
重点:面向接口编程
详细讲解:
七、内部类、匿名类、异常类
详细讲解:
八、常用实用类
(一)、String类
1、构造String对象
String 对象;也叫字符串对象;
常量对象:Java中把用户程序里的string 常量放入常量池,同时该常量也有自己的引用和实体;
String 对象:对象变量中存放着引用;存放在动态区(非常量池);
创建String 对象的方法:
- 用已经创建的String对象创建另一个String对象
2、字符串的并置
字符串对象之间可以直接相加,得到一个新的字符串对象;
3、String类的常用方法
length()
equals(String s)
startsWith(String s)、endsWith(String s)
compareTo(String s)
contains(String s)
indexOf(String s)
lastIndexOf(String s)
substring(int startpoint)
trim()
4、字符串与基本数据的相互转化
5、对象的字符串表示
所有的类都默认是java.lang包中Object类的子类或间接子类;Object类有一个public String toString()方法,对象调用该方法可以获得该对象的字符串表示——其形式为:创建对象的类的名字@对象的引用的字符串表示(地址)
6、字符串与字符数组、字节数组
7、正则表达式及字符串的替换与分解
(二)、StringTokenizer类
作用:使用StringTokenizer对象分解String对象的字符序列
StringTokenizer类在java.util包中,该类有两个常用的构造方法;