目录
一、基础知识
1.JDK、JVM、JRE
JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM(Java Virtual Machine),lib中则是jvm工作所需要的类库,而jvm和lib合起来就称为JRE(Java Runtime Environment,Java运行环境)。
2.标识符、保留字、关键字
int 1a = 3; //不能用数字开头
int a# = 3; //不能包含#这样的特殊字符
int int = 3; //不能使用关键字
3.数据类型
类型名称 | 关键字 | 占用内存 | 取值范围 |
---|---|---|---|
字节型 | byte | 1 字节 | -128~127 |
短整型 | short | 2 字节 | -32768~32767 |
整型 | int | 4 字节 | -2147483648~2147483647 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L |
单精度浮点型 | float | 4 字节 | +/-3.4E+38F(6~7 个有效位) |
双精度浮点型 | double | 8 字节 | +/-1.8E+308 (15 个有效位) |
字符型 | char | 2 字节 | ISO 单一字符集 |
布尔型 | boolean | 1 字节 | true 或 false |
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
double x = 3.14;
int nx = (int)x; //值为 3
4.变量及命名规范
1. 所有变量、方法、类名:见名知意2. 类成员变量:首字母小写和驼峰原则 : monthSalary3. 局部变量:首字母小写和驼峰原则4. 常量:大写字母和下划线: MAX_VALUE5. 类名:首字母大写和驼峰原则 : Man, GoodMan6. 方法名:首字母小写和驼峰原则 : run(), runRun()
public interface YtAsnManager extends BaseManager {
void storeYtAsn(YtAsn asn);
void addDetail(Long asnId ,Integer qty,YtAsnDetail asnDetail);
5.运算符
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
- Java 运算符 | 菜鸟教程 (runoob.com)
https://www.runoob.com/java/java-operators.html
6.基本结构
6.1顺序结构
6.2选择结构
- if...else
- switch...case
示例如下:
int x = 30;
if( x == 10 ){
System.out.print("Value of X is 10");
}else if( x == 20 ){
System.out.print("Value of X is 20");
}else if( x == 30 ){
System.out.print("Value of X is 30");
}else{
System.out.print("这是 else 语句");
}
switch(x){
case 10:System.out.print("10");break;
case 20:System.out.print("20");break;
case 30:System.out.print("30");break;
case 40:System.out.print("40");break;
case 50:System.out.print("50");break;
}
6.3 循环结构
- while
- do…while
- for
示例如下:
int i = 0;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("Sum= " + sum); }
do {
sum += i;
i++;
} while (i <= 100);
System.out.println("Sum= " + sum); }
for(int i = 1;i<=100;i++){
System.out.println(i);
}
与其他两者不同,do while是先执行再判断,do内的内容至少执行一次。因而使用相对较少。
7.方法
Java方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
方法类似于C语言中的函数。同样具有形参和实参。有返回值等参数.
8.面向对象与面向过程
面向对象:
- 结构清晰,程序是模块化和结构化,更加符合人类的思维方式;
- 易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
- 易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
二、进阶知识
1.内存分析
1.1 栈
- 每个线程私有,不能实现线程间的共享!
- 局部变量放置于栈中。
- 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
1.2 堆
- 放置 new 出来的对象!
- 堆是一个不连续的内存空间,分配灵活,速度慢!
1.3 方法区
- 本质也是堆
- 被所有线程共享!
- 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)
2.内存管理、垃圾回收机制
- 对象空间的分配 :使用 new 关键字创建对象即可
- 对象空间的释放 :将对象赋值 null,即该对象没有引用指向时。垃圾回收器将负责回收所有”不可达”对象的内存空间
注意事项:
- 程序员无权调用垃圾回收器。
- 程序员可以通过 System.gc()。通知 GC 运行,但是 JAVA 规范并不能保证立刻运行。
- finalize 方法,是 JAVA 提供给程序员用来释放对象或资源的方法,但是尽量少用。
3.构造方法、继承、重载、重写
3.1 构造器(构造方法)
构造器用于构造该类的实例,如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。如果已定义则编译器不会添加。 构造器的方法名必须和类名一致
public class Car {
int speed;
public Car(){
System.out.println("构造一个车");
}
}
3.2 重载
3.3 继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
3.4 重写
子类可以继承父类的对象方法,在继承后,重复提供该方法,就叫做方法的重写,又叫覆盖 override
示例如下:
public class Human {
String name = "Human";
final static String aim="alive";
static String need;
public String getName(){
return this.name;
}
public void sleep() {
System.out.println("Human sleep..");
}
public static void main(String[] args) {
Human.need="food";
System.out.println(Human.need);
}
}
class Male extends Human {
String name = "Male";
public String getName(){
return this.name;
}
@Override
public void sleep() {
System.out.println("Male sleep..");
}
public void speak() {
System.out.println("I am Male");
}
}
class Female extends Human {
String name = "Female";
public String getName(){
return this.name;
}
@Override
public void sleep() {
System.out.println("Female sleep..");
}
public void speak() {
System.out.println("I am Female");
}
}
4.封装、多态
- 封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
- 保护成员属性,不让类以外的程序直接访问和修改;
- 隐藏方法细节
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
示例如下:
public class Hero {
public String name;
protected float hp;
public void useItem(Item i){
i.effect();
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
LifePotion lp =new LifePotion();
MagicPotion mp =new MagicPotion();
garen.useItem(lp);
garen.useItem(mp);
}
}
5.抽象类、接口
- 抽象类提供某些具体实现
- 接口不提供任何实现
package animalworld;
public interface Pet {
public String getName();
public void setName(String name);
public void play();
}
package animalworld;
public class Spider extends Animal {
public Spider(){
super(8);
System.out.println("Here is a spider ohhhhhh\n");
}
public void eat(){
System.out.println("spider eat\n");
}
}
package animalworld;
public abstract class Animal{
protected int legs;
protected Animal(int legs){
this.legs=legs;
}
public void walk(){
System.out.println("This animal use "+legs+" legs walked");
}
public abstract void eat();
public static void main(String []args){
Cat a=new Cat("喵喵");
a.getName();
a.eat();
a.play();
a.walk();
}
}
package animalworld;
public class Cat extends Animal implements Pet {
String name;
public Cat(String name){
super(4);
this.name=name;
System.out.println("there is a cat called"+name+".How quite it is.\n");
}
public Cat(){
//this("");
super(4);
}
@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}
@Override
public void setName(String name){
// TODO Auto-generated method stub
this.name=name;
}
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("huluhulu\n");
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}
7.内部类
- 内部类只让外部类访问,封装更好。
- 内部类可以访问外部类的私有属性,外部类不能访问内部类的私有属性。
8.数组
数组是一个固定长度的,包含了相同类型数据的容器。数组的元素可以是任何数据类型,也可以看成是对象。
示例如下:
public class test1 {
public static void main(String[] args) {
int[] a = new int[5];
a[0] = (int) (Math.random() * 100);
a[1] = (int) (Math.random() * 100);
a[2] = (int) (Math.random() * 100);
a[3] = (int) (Math.random() * 100);
a[4] = (int) (Math.random() * 100);
int min=a[0];
int max=a[0];
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
if (min>a[i])
min=a[i];
if (max<a[i])
max=a[i];
}
System.out.println("min: "+min);
System.out.println("max: "+max);
}
}
9.包装类
包装类即为将原始数据类型转换为对象,以及将对象转换为原始数据类型的机制。
包装类提供了大量的方法便于对各种情况的处理,详见此博文:
Java包装类 - Java教程™ (yiibai.com)
示例如下:
public class WrapperExample1 {
public static void main(String args[]) {
// Converting int into Integer
int a = 20;
Integer i = Integer.valueOf(a);// converting int into Integer
Integer j = a;// autoboxing, now compiler will write Integer.valueOf(a)
// internally
System.out.println(a + " " + i + " " + j);
}
}
10.异常处理
- 1. 抛出异常
- 2. 捕获异常
try执行语句,抛出异常时catch捕获异常,无论是否catch,最终都执行finally中的代码块。
示例如下:
// 文件名称 CheckingAccount.java
import java.io.*;
//此类模拟银行账户
public class CheckingAccount
{
//balance为余额,number为卡号
private double balance;
private int number;
public CheckingAccount(int number)
{
this.number = number;
}
//方法:存钱
public void deposit(double amount)
{
balance += amount;
}
//方法:取钱
public void withdraw(double amount) throws
InsufficientFundsException
{
if(amount <= balance)
{
balance -= amount;
}
else
{
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
}
//方法:返回余额
public double getBalance()
{
return balance;
}
//方法:返回卡号
public int getNumber()
{
return number;
}
}
//文件名称 BankDemo.java
public class BankDemo
{
public static void main(String [] args)
{
CheckingAccount c = new CheckingAccount(101);
System.out.println("Depositing $500...");
c.deposit(500.00);
try
{
System.out.println("\nWithdrawing $100...");
c.withdraw(100.00);
System.out.println("\nWithdrawing $600...");
c.withdraw(600.00);
}catch(InsufficientFundsException e)
{
System.out.println("Sorry, but you are short $"
+ e.getAmount());
e.printStackTrace();
}
}
}
// 文件名InsufficientFundsException.java
import java.io.*;
//自定义异常类,继承Exception类
public class InsufficientFundsException extends Exception
{
//此处的amount用来储存当出现异常(取出钱多于余额时)所缺乏的钱
private double amount;
public InsufficientFundsException(double amount)
{
this.amount = amount;
}
public double getAmount()
{
return amount;
}
}
11.File类
File 类可以实现在程序中操作文件和目录,如新建、删除、重命名文件和目录等。
Java File类(文件操作类)详解 (biancheng.net)http://c.biancheng.net/view/1133.html示例如下:
package file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FilePractice {
public static void copyFile(String srcFile,String destFile){
File src = new File(srcFile);
File dest = new File(destFile);
try{
FileInputStream read = new FileInputStream(src);
FileOutputStream write = new FileOutputStream(dest);
byte a[] = new byte[(int)src.length()];
read.read(a);
write.write(a);
}
catch(IOException e){
e.printStackTrace();
}
}
public static void copyFolder(String srcFolder, String destFolder){
String []filelist = testab.bianli(srcFolder);
}
public static void main(String []args){
FilePractice.copyFile("d:/1.PNG","d:/xyz/1.PNG");
}
}
12.日期处理
java.util 包提供了 Date 类来封装当前的日期和时间。
常用的时间类还包括:SimpleDateFormat、Calander、GregorianCalendar等,提供了不同当时强大的功能。
示例如下;
import java.util.Calendar;
public class Test {
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
c1.set(2017, 2, 1);
System.out.println(c1.get(Calendar.YEAR)
+"-"+c1.get(Calendar.MONTH)
+"-"+c1.get(Calendar.DATE));
c1.set(2017, 2, -10);
System.out.println(c1.get(Calendar.YEAR)
+"-"+c1.get(Calendar.MONTH)
+"-"+c1.get(Calendar.DATE));
}
}
三、框架学习总结
1.需求分析
2.步骤总结:
2.1 建立并配置实体类TestItem
该目录下创建两个文件夹和两个文件:
在TestItem.java文件中,定义code、name属性,并定义相应的get、set方法:
创建test数据库,设置ID为主键,表结构如图
根据表结构和表名称,在hbm文件夹下使用TestItem.hbm.xml文件配置与TestItem.java 关联的表。
在该文件中,配置TestItem.hbm.xml文件
2.2 建立并配置TestItemManager
在该目录下创建两个文件夹和两个文件:
在TestItemManager.java中构造方法
在DefaultTestItemManager.java中实现相应的方法
在该文件中对服务进行配置:
2.3 界面建立
在该注册文件中注册所需的界面。
注册菜单 menuconfig.xml
在该目录中新建文件:
maintainTestItemPage.xml是TestItem的主界面配置文件,如图所示:
利用HQL语句查询数据库内容,利用column配置界面显示的方式
maintainTestItemPage_zh.properties配置主界面的国际化
editTestItemPage.xml是新建界面的配置文件,如图:
editTestItemPage_zh.properties配置新建界面的国际化
2.4 界面按钮配置
新在建流新建流程文件程文件
在该路径下新建流程文件 testProcess.xml
该路径下,对按钮进行配置:maintainTestItemPage.wf.xml
editTestItemPage.wf.xml