一、java的专业术语:
1、JDK:编写java程序的程序员使用的软件
2、JRE:运行java程序的用户使用的软件
3、SE:用于桌面或简单的服务器应用的java平台
4、EE:用于复杂的服务器应用的java平台
5、ME:用于手机和其他小型设备的java平台
6、java是HTML的扩展
(1)、 java是一种程序设计语言;
(2)、HTML是一种描述网页结构的方式
(3)、XML是一种描述数据的方式
(4)、网页中运行的java程序称为:applet
二、JDK目录树1、bin 编译器和工具
2、demo 实例演示
3、docs HTML格式的类库文档(包含了HTML格式的类库文件,也可以使用任何浏览器查看这些文档)
4、include 用于编译本地方法的文件
5、jre java运行环境文件
6、lib 类库文件
7、src 类库源文件(src目录中已经包含了java类库中公共部分的源代码)
就学习java而言,docs和src是两个最有用的子目录
三、java中关键字public称为访问修饰符,用于控制程序其他部分对这段代码的访问级别。
1、关键字class表明就java程序中的全部内容都包含在类中,关键字class后面紧跟类名。(类名是以大写字母开头的名词 例如:FirstSample,CameCase)
2、源代码的文件名必须和公共类名是一样的,并且使用.java作为扩展名。如:FirstSample.java
3、java中一共8种基本类型,其中4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型
4、四种整型:int:4字节
short:2字节long:8字节
byte:1字节
5、两种浮点类型:float:4字节
double:8字节
double表示这种类型的数值精度是float类型的两倍;大部分应用程序都采用的是double类型。
6、十六进制数值的前缀是0x;八进制的前缀是0; 从java7开始;二进制的前缀是0b;
四、变量
(一)变量初始化
1、在java中每个变量属于一种类型,就是声明变量!!!
2、声明一个变量之后,必须用赋值语句对变量进行显示初始化!!!
(二)常量
1、在java中,利用关键字final指示常量。
例如:final doubel pageWitdth=2.54;
(关键字final表示这个变量只能被赋值一次。一旦赋值之后,就不能够在被更改了。)
在java中,经常希望某个变量可以在一个类中的多个方法中使用,通常将这些变量称之为类变量。
例如:在类中定义一个:public static final double pageWidth=2.54;(注意:类常量的定义是位于main方法之外的)
2、数学函数
在Math类中,包含了各种各样的数学函数
例如:double y = Math.sqrt(x);计算x的平方根是多少。
在源文件的顶部加上:import static java.Math.*;之后就不必在数学方法名和常量名前添加“Math”。
3、强制类型转换(cast)
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧接着待转换的变量名。
例如:(1)double x = 9.997;
int nx = (int) x;
输出的nx的值是9;
//对浮点数进行舍入运算,得到最接近的整数
(2)double x = 9.997;
int nx = (int) Math.round(x);
输出的nx值是10;
当调用round的时候,仍然需要使用强制类型转换为(int)。因为round方法返回的结果是long类型。
五、字符串
java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义类(String),
每个用双引号括起来的字符串都是String 类的一个实例。
(一)、子串
1、String类的substring方法可以从一个较大的字符串提取出一个子串。
例如:String greeting = "Hello"
String s = greeting.substring(0,3);
创建了一个有字符“Hel”组成的字符串。(substring方法的第二个参数是不想复制的第一个位置)
(二)、字符串的拼接
java语言中使用+号连接(拼接)两个字符串。
例如:String expletive = "Expletive";
Srting PG13 = "deleted";
String message = expletive + PG13;
输出结果是:Expletivedeleted
(三)、检测字符串是否相等
可以使用equals方法检测两个字符串是否相等。
表达式:s.equals(t)
1、如果字符串s与字符串t相等,则返回true
2、如果字符串s与字符串t不相等,则返回false
使用equalsIgnoreCase方法表示检测两个字符串是否相等,并且不区分大小写。
例如:"Hello".equalsIgnoreCase("hello");
(四)、构建字符串
String Builder = new StringBuilder();
2、当每次需要添加一部分内容时,就调用append方法。
builder.append(ch);
builder.append(str);
3、在需要构建字符串时就调用toString方法,将可以得到一个String对象。
String completedString = builder.toString();
(五)、输入输出
1、读取输入
通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。
Scannrer in = new Scanner(system.in);
现在可以使用Scanner类的各种方法实现输入操作。
例如:(1)、nextLine方法输入一行
System.out.print("What is your name?");
String name = in.nextLine();
String age = innextInt();//nextInt方法读取一个整数。
//nextDouble方法读取一个浮点数。
最后在程序的最开始添加一行 import java.util.*;
Scanner类定义在java.util包中。当使用的类不是定义在基本的java.lang包中时,一定要使用import指示字将相应的包相加载进来。
2、文件的输入与输出
(1)、对文件的读取,需要一个用File对象构造一个Scanner对象。
如:Scanner in = new Scanner(Path.get("myfile.txt"));
如果文件名中包括反斜杠符号,就要记住在每个反斜杠符号前面再加上一个额外的反斜杠。
如:"c:\\mydirectory\\myfile.txt"
(2)、要想写入文件,就需要构造一个PrintWriter对象,在构造器中,只需要提供文件名:
如:PrintWriter out = new PrintWrite("myfile.txt");
3、控制流程
块(block)是指有一对花括号括起来的若干条简单的java语句。块确定了变量的作用域。一个快可以嵌套在另一个块中。但不能在嵌套的两个块中声明同名的变量。
(1)、多重选择:switch语句
switch语句将从与选项值相匹配的case中标签处开始执行直到遇到break语句,或者执行到switch语句的结束出为止。如果没有相匹配的case标签,而有default自居,就执行这个字句。
case标签类型可以是(1)char、byte、short、或int的常量表达式。
(2)枚举常量
(3)字符串字面量
(2)、中断控制流程语句
1、退出switch语句的break语句。break语句:用于强制性的终止整个循环。
2、continue语句(将控制转移到最内层的首部)结束本次循环继续下一次。
4、大数值
java.math包中的两个很有用的类:BigInteger和BigDecimal。
(1)、BigInteger 类实现了任意精度的整数运算
(2)、BigDecimal 类实现任意精度的浮点数运算
使用静态的valueOf方法可以将普通的数值转换为大数值:
BigInteger a = BigInteger.valueOf(100);
在用大数据进行运算处理的时候需要大数值类中的add、multiply、divide和subtract进行运算符处理。
例如:BigIntteger c = a.add(b);//c = a+b;
5、命令行参数
每个java应用程序都有一个带String[] args参数的main方法。这个参数表明main方法
将接收一个字符串数组,也就是命令行参数。
六、对象和类(对象是具体的,类是抽象的)
1、面向对象的程序是由对象组成的,每个对象都包含对用户公开的特定功能部分和隐藏的实现部分。
面向对象的程序设计是将数据(组织数据)放在第一位,然后考虑操作数据的算法。
2、类(类名要和文件名相一致)
类是构造对象的模板或蓝图。
(1)、类中的基本概念
封装:是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
实例域:对象中的数据称为(实例域)
方法: 操纵数据的过程
对于每个特定的类实例(对象)都有一组特定的实例域值。
(2)、类之间的关系
类之间常见的关系:
依赖(“user-a”):如果一个类的方法操纵另外一个类的对象,就说一个类依赖于另外一个类。
聚合(“has-a”):意味着类A的对象包含着类B的对象。
继承(“is-a”):
3、对象
对象就是类的实例
对象的是三个状态:1、对象的行为
2、对象的状态:每个对象都保存着描述当前特征的信息,对象的状态的改变必须通过调用方法实现
3、对象标识--如何辨别具有相同行为与状态的不同对象?
作为一个类的实例,每个对象的标识永远是不相同的,状态也尝尝存在真差异。
4、用户自定义类
(1)、在一个源文件中,只能有一个共有类,但可以有任意数目的非共有类。
(2)、如果在一个源文件中包含了两个类,有两种编译源程序的方法。
1、使用通配符调用java编译器,使得所有与通配符匹配的源文件都被编译成类文件。
2、直接输入:javac EmployeeTest.java
(3)、被关键字public标记的方法意味着任何类的任何方法都可以调用这些方法。
(4)、被关键字private标记的方法则只能被自身的类能够访问这些实例域,而其他类则不能读写这些域。
(5)、如果没有被public和private标记的,这部分(类 方法和变量)可以被同一个包中所以方法访问。
(6)、在每一个方法中,关键字this表示隐式参数。
(7)、显示参数一般是明显的列在方法声明中的,位于方法名后面的括号中的数值。
5、私有的方法
在Java中,为了实现一个私有的方法,只需要将关键字public改为private即可。
只要方法是私有的,类的设计者就可以确信:它不会被外部的其他类所操作,可以将其删除。
如果方法是公有的,就不能将其删除,以为其他代码很可能依赖它。
6、final实例域
当用final修饰一个类时,表明这个类不能被继承。
使用final方法是把方法锁定,以防任何继承类修改它的含义
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
七、静态方法和静态域
1、如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。
2、静态常量:public static final double PI = 3.15159265358.
由于每个类对象都可以对公有域进行修改,所以,最好不要将域设计为public。
然而,公有常量(即final域)却没问题。因为out被声明为final,所以不允许再将其他打印流赋值给它。
3、静态方法:是一种不能面向对象实施操作的方法。
静态方法中是没有this参数的方法(在一个非静态的方法中,this参数表示这个方法的隐式参数)
有两种情况下可以使用静态方法:
(1)、一个方法不需要访问对象状态,其所需参数都是通过显示参数提供的。
(2)、一个方法只需要访问类的静态域。
在C++中,使用::操作符来访问自身作用域之外的静态域和静态方法。如:Math::PI
main方法不对任何对象进行操作。事实上,在启动程序的时还没有任何一个对象。
静态的main方法将执行并创建程序所需要的对象。
4、方法参数
两种参数值传递的方式:
(1)、按值调用:表示方法接收的是调用者提供的值。
(2)、按引用调用:表示方法接收的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改专递值调用所对应的变量值。
java程序设计语言总是采用按值传递。也就是说,方法得到的是所有参数值得一个拷贝,特别是,方法不能修改传递给它任何参数变量的内容。
(3)、方法参数总共有两种类型:1、基本数据类型(数字、布尔值)
2、对象引用
一个方法不可能修改一个基本数据类型的参数。
(4)、方法得到的是对象引用的拷贝,对象的引用及其他的拷贝同时引用同一个对象。
(5)、总结下java程序设计语言中方法参数的使用情况:
1、一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
2、一个方法可以改变一个对象参数的状态。
3、一个方法不能让对象参数引用一个新的对象。
八、对象构造
1、重载
两同三不同(同一个类、同一个方法。参数列表不同:类型、个数、顺序 )
2、java的初始化
三种初始化数据域的方法:
(1)、在构造器中设置值
(2)、在声明中赋值(3)、初始化块(在一个类声明中可以包含多个代码块。)
总结 构造器和方法的区别:
主题 构造器 方法
功能 建立一个类的实例 java功能语句
修饰 不能用bstract, final, native, static, or synchronized 能
返回类型 没有返回值,没有void 有返回值,或者void
命名 和类名相同;通常为名词,大写开头 通常代表一个动词的意思,小写开头
this 指向同一个类中另外一个构造器,在第一行 指向当前类的一个实例,不能用于静态方法
super 调用父类的构造器,在第一行 调用父类中一个重载的方法
继承 构造器不能被继承 方法可以被继承
编译器自动加入 自动加入(如果没有)
一个缺省的构造器 不支持
编译器自动加入 自动加入(如果没有)
一个缺省的调用到超类的构造器 不支持
3、调用构造器的具体步骤
(1)、所有的数据域都被初始化为默认值(0、false和null)
(2)、按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。
(3)、如果构造器的第一行调用了第二个构造器,则执行第二个构造器主体。
(4)、执行这个构造器的主体。
4、对象析构和finalize方法
在析构器中,最常见的操作是回收分配给对象的存储空间。而java中有自动的垃圾回收器,所有java中不支持析构器。
finallize方法将在立即回收器清除对象之前调用。
如果某个资源需要在使用完后立即被关闭,那么就需要有人工来管理。
对象在用完时,可以用一个close方法来完成相应的清理操作。
九、包(package)
必须位于第一行,包名:是域名的逆序形式。
包主要原因是确保类名的唯一性。包可以划分成子包。包也可以进行嵌套,嵌套的包之间是没每个有任何关系的。包都有一个独立的类集合。
一个类可以使用所属包中的所有类,以及其他包中的公有类。
两种方式访问另外一个包中的公有类:
(1)、在每个类名之前添加完整的包名。
(2)、使用import语句,import语句是一种引用包含在包中的类的简明描述。一旦使用了import语句,在使用类时,就不必写出包的全名了。例如:(1)、java.util.Date today = new java.utilDate();
(2)、import java.util.*;
2、静态导入
如:import static java.lang.System.*;
就可以使用System类的静态方法和静态域,而不必加类名前缀;
out.println("Goodbye World!"); //i.e.,System.out
exit(); //i.e,System.out;
3、将类放入包中
要将一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。
例如:package com.horstamann.corejava;
piubli class Employee{
....
}
4、包的作用域
标记为public的部分可以被任意的类使用;
标记为private的部分只能被定义它们的类使用;
如果没有指定public和private,这个部分(类 方法或变量)可以被同一个包中的所有方法访问;
十、文档注释
在源代码中添加专用的定界符“/**”开始的注释,很容易看上去具有专业水平的文档。
1、注释的插入
javadoc实用程序从下面几个特性中抽取信息:
(1)、包
(2)、公有类和包
(3)、公有的和受保护的构造器及方法
(4)、公有的和受保护的域
应该为上面几部分编写注释。注释应该放在所描述特性的前面。
注释以/**开始,以*/结束。
每个/**...*/文档注释在标记之后紧跟着自由格式文本(free-form text)。
标记由@开始,如:@param或@author。
2、类注释
类注释必须放在import语句之后,类定义之前。