1、XML 是一种描述数据的方式。可以使用任何一种程序设计 语言处理 XML 数据,而 Java API 对 XML 处理提供了很好的支持。
2、HTML 是一种描述网页结构的方式。除了用于在网页上放置 Java applet 的 HTML 扩展之外,两者没有任何共同之处。
3、检查一个字符串既不是 null 也不为空串
if (str != null && str.length() != 0)
4、关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上, 常量名使用全大写。在 Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为 类常量。可以使用关键字 static fina丨设置一个类常量。
5、数据类型
Java 是 -种强类型语言。这就意味着必须为每一个变量声明一种类型: 在 Java 中, -共有 8 种基本类型(primitive type), 其中有 4 种整型、2 种浮点类型、 1 种用于表示 Unicode编码的字符 单元的字符类型 char (请参见论述 char类型的章节)和 1 种用于表示真值的 boolean类型。
在 Java中,char 类型描述了 UTF-16 编码中的一个代码单兀。 我们强烈建议不要在程序中使用 char 类型,除非确实需要处理 UTF-16 代码单元。最好 将字符串作为抽象数据类型处理。
6、需要注意, 整数被 0除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN结果。
7、位运算符
& (“and”) 、 | (“or”) 、 ^ (“XOr”)、 ~(“not”)
8、 枚举类型
有时候,变量的取值只在一个有限的集合内。针对这种情况, 可以自定义枚举类型。枚举类型包括有限个命名的值。
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARCE};
9、 字符串
每个用双引号括起来的字符串都是 String类的一个实 例。
子串 String类的 substring方法可以从一个较大的字符串提取出一个子串。
拼接 Java语言允许使用 + 号连接(拼接)两个字符串。
在需要构建字符串时就凋用 toString 方法, 将可以得到一个 String 对象, 其中包含了构建器 中的字符序列。
10、读取文件
要想对文件进行读取,就需要一个用 File 对象构造一个 Scanner 对象,如下所示: Scanner in = new Scanner(Paths.get(“myflle.txt”), “UTF-8”); 如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠: “ c:\mydirectory\myfile.txt” 。
11、写入文件
要想写入文件, 就需要构造一个 PrintWriter 对象。在构造器中,只需要提供文件名: PrintWriter out = new PrintlulriterC’myfile.txt", “UTF-8”); 如果文件不存在,创建该文件。可以像输出到 System.out—样使用 print、 println 以及 printf 命令。
12、 多重选择:switch 语句
switch语句将从与选项值相匹配的 case标签处开始执行直到遇到 break语句,或者执行到 switchi吾句的结束处为止。如果没有相匹配的 case 标签, 而有 default 子句, 就执行这个子句。
警告: 有可能触发多个 case 分支。如果在 case 分支语句的末尾没有 break 语句, 那么就 会接着执行下一个 case 分支语句。这种情况相当危险, 常常会引发错误。
13、下 面声明了整型数组 a: int[ ] a;
应该使用 new 运算 符创建数组。 int[ ] a = new int[100];
14、 for each 循环
例如, for (int element : a)
System.out.println(element);打印数组 a 的每一个元素,一个元素占一行。
foreach 循环语句的循环变量将会遍历数组中的每个元素, 而不需要使用下标值。
15、数组排序
要想对数值型数组进行排序, 可以使用 Arrays类中的 sort 方法。
16、数组拷贝
如果希望将 一个数组的所有值拷贝到一个新的数组中去, 就要使用 Arrays 类的 copyOf方法。
17、构造器与其他的方法有一个重要的不同。构造器总是伴随着 new 操作符的执行被调用, 而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
•构造器与类同名
•每个类可以有一个以上的构造器
•构造器可以有 0 个、1 个或多个参数
•构造器没有返回值
•构造器总是伴随着 new 操作一起调
18、java POI 读取Excel数据
整型自动变double型了,需重新格式化保持不变
double d = cell_0.getNumericCellValue();
NumberFormat nf = NumberFormat.getInstance();
String s = nf.format(d);
19、boolean 类型与数值类型之间,只有极少数的情况才需要将布尔类型转换为数值类型,可以使用条件表达式b ? 1:0。
20、可以在赋值中使用二元运算符,x+=4; 等价于x=x+4;(一般地,要把运算符放在=号左边,如*=或%=)
21、自增与自减运算符
int n=1;
n++;//n-- (后缀形式)
++n;//--n (前缀形式)
后缀和前缀形式都会使变量值加1或减1.但是用在表达式中时,二者是不一样的,前缀形式会先完成加1;而后缀形式会使用变量原来的值,运算后自己值再加1.
22、字符串
String 任何用双引号括起来的字符串都是String类的一个实例。
(1)子串
String类的substring方法可以从一个较大字符串提取出一个子串。
String a="hello";
String s=a.substring(0,3);
s="hel";
(2) 拼接
Java 语言允许使用+号连接(拼接)两个字符串。
(3)字符串修改:
提取需要的字符,然后再拼接上替换的字符串,创建一个新字符串。
(4)采用 equals 方法检测字符串是否相等
a.equals(b);
不区分大小写比较,使用equalsIgnoreCase()方法,
(5)空串与Null串
空串“” 是长度为0的字符串
检查是否为空串,
if(str.length()==0)或者if(str.equals(""))
空串是一个Java对象,有自己的串长度(0)和内容(空)。
Null串,要检查一个字符串是否为null,使用以下条件,
if(str==null)
Java中String类包含了50多个方法。
23、
List继承了Collection,是有序的列表。
实现类有ArrayList、LinkedList、Vector、Stack等
ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!
LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!
Vector是基于数组实现的,是一个矢量队列,是线程安全的!
Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)!
在实际的应用中如果使用到队列,栈,链表,首先可以想到使用List。不同的场景下面使用不同的工具,效率才能更高!
double y = Math.pow(x, a);
27、
JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的存取操作。
JDBC代表Java数据库连接。
JDBC库中所包含的API任务通常与数据库使用:
连接到数据库
创建SQL或MySQL语句
在数据库中执行SQL或MySQL查询
查看和修改记录
28、 NAT 功能
端口映射是 NAT 的一种,它将外网主机的 IP 地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
#################################################################################
类 和对象
类
类定义了一种抽象的数据类型。
类不但定义了抽象数据类型的组成(成员变量),同时还定义了可以对该类型实施的操作(方法)。
类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述该类型对象共同的数据结构。
成员变量的类型分一、8中基础类型;二、引用类型,引用类型初始
值为null。
class 类名{
成员变量类型 变量名称;
… … …
}
类的方法的定义:用于描述对象的行为,封装对象的功能。
class 类名{
修饰词 返回值类型 方法名称([参数列表]){
方法体
}
… … …
}
使用new关键字创建对象
类定义完成后,可以使用new关键字创建对象。创建对象的过程通常称为实例化。
new 类名();
引用类型变量:
为了能够对实例化的对象进行访问控制,需要使用一个特殊的变量-----引用。
引用类型变量可以存放在该类对象的地址信息,通常称为“指向该类的对象”;当一个引用类型变量指向该类的对象时,就可以通过这个变量对对象实施访问。
除8种基本类型之外,用类、接口、数组等声明的变量都称为引用变量,简称“引用”。
访问对象的成员变量、调用方法
可以通过引用访问对象的成员变量或调用方法**。
引用类型变量的赋值
引用类型变量存储的是对象的地址信息。相同类型的引用类型变量之间也可以相互赋值。
引用类型变量之间的赋值不会创建新的对象,但有可能会使两个以上的引用指向同一个对象。
null 和NullPointerException (空与空指针异常)
对于引用类型变量,可以对其赋值为null。null的含义为“空”,表示还没有
指向任何对象。
当一个引用的值为null的时候,如果通过引用访问对象成员变量或者调用方法是不和逻辑的,此时,会产生NullPointerException。
方法重载及意义
在Java语言中,允许许多方法的名称相同,但参数列表不同,称之为方法的重载(overload)
构造方法语法结构
构造方法是在类中定义的方法,不同于其他的方法,构造方法的定义有如下两点规则:
构造方法的名称必须与类名相同。
构造方法没有返回值,但也不能写void。
语法:
【访问修饰符】类名(){
/构造方法体
}
通过构造方法初始化成员变量
构造方法通常用于实现对象成员变量的初始化。
创建对象时,构造方法写在new 关键字后,可以理解为:“new”创建了对象,而构造方法对该对象进行初始化。
this关键字的使用
this关键字用在方法体中,用于指向调用该方法的当前对象;**简单地说:那个对象调用方法,this指的就是哪个对象。**严格来讲在方法中需要通过this关键字指明当前对象。
在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字。这样会有利于代码的可读性,但此处就必须通过this关键字来区分成员变量和参数。
任何一个类都必须含有构造方法,
如果源程序中没有定义,编译器在编译时将为其添加一个无参的空构造方法。
当定义了构造方法后,Java编译器将不再添加默认的构造方法。
构造方法的重载:
为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),方法的参数不同,称之为构造方法的重载。
数组是对象
在JAVA中,数组属于引用数据类型。
数组对象在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象。
数组的元素可以看成数组对象的成员变量(只不过类型全都是相同的)
引用类型数组的声明
数组的元素可以是任何类型,当然也包括引用类型,
引用类型数组的初始化
引用类型数组的默认初始值都是null。
如果希望每一个元素都指向具体的对象,需要针对每一个数组元素进行new 运算。
向线程中传递数据的三种方法:
一、通过构造函数传递参数
public class MyThread1 extends Thread
{
private String name;
public MyThread1(String name)
{
this.name = name;
}
public void run()
{
System.out.println("hello " + name);
}
public static void main(String[] args)
{
Thread thread = new MyThread1("world");
thread.start();
}
}
二、通过变量和方法传递数据
public class MyThread2 implements Runnable
{
private String name;
public void setName(String name)
{
this.name = name;
}
public void run()
{
System.out.println("hello " + name);
}
public static void main(String[] args)
{
MyThread2 myThread = new MyThread2();
myThread.setName("world");
Thread thread = new Thread(myThread);
thread.start();
}
}
三、通过回调函数传递数据
class Data
{
public int value = 0;
}
class Work
{
public void process(Data data, Integer numbers)
{
for (int n : numbers)
{
data.value += n;
}
}
}
public class MyThread3 extends Thread
{
private Work work;
public MyThread3(Work work)
{
this.work = work;
}
public void run()
{
java.util.Random random = new java.util.Random();
Data data = new Data();
int n1 = random.nextInt(1000);
int n2 = random.nextInt(2000);
int n3 = random.nextInt(3000);
work.process(data, n1, n2, n3); // 使用回调函数
System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"
+ String.valueOf(n3) + "=" + data.value);
}
public static void main(String[] args)
{
Thread thread = new MyThread3(new Work());
thread.start();
}
}