1.Java程序的编写,翻译和运行过程
java程序可以用记事本来编写,但是要保存为后缀为.java的文件才能被编译,运行叫javac的文件可以将java文件进行编译。
2.JDK,JRE,JVM关系,区别
JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比SUN的JDK高的多。
JRE:Java Runtime Enviromental(java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
JVM:Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
下图很好的表面了JDK,JRE,JVM三者间的关系:
http://dl.iteye.com/upload/attachment/364841/7dbc84af-e878-3718-beb5-6471ad99b995.gif
3.数据类型:
JAVA中数据类型总共有3种
基本类型(8种)
byte 8bit -128~127
char 16bit
short 16bit
int 32bit
long 64bit
float 32bit
double 64bit
boolean 8bit true/false
引用类型(类类型):每一个类(接口,抽象类)都是一种数据类型
数组类型:基本类型或者引用类型的集合
int[][] t; String[] str;
int t[][];
int[] t[];
2.面向过程,面向对象理解
面向过程就是在一件事中,只关心一件事情是如何发生的,
面向对象就是在一件事中,只关心是谁让这一件事情发生了。
就好比在一句话中面向过程就是句子中的谓语,面向对象就是主语或者宾语。
3.类与对象的关系分析
什么是对象?
简单的说,对象是现实世界中具体存在的事物或者实体,对象在面向对象编程中是核心,为程序提供实用的基础,为完成特定的任务而存在。
而通俗来说,类就是一组具有相同特征与行为的对象的集合。类是这组对象的模板,定义了这组对象的属性和方法。也可以说类就是把现实生活中具有相同特征和行为的一个群体抽象出来的概念。而对象则是实际存在的。对象通过调用类中的方法来改变自身的属性值。
4.如何定义一个类,如何创建对象,如何调用属性和方法
public class A{
public A(){
}
private int m;
public void n(){
}
}
A a = new A();
a.m=10;
a.n();
5.构造方法与一般方法的区别
构造器严格的说不算是”方法“,只是因为它也可以传入参数,构造器方法没有任何返回值的定义,
且必须与类名字相同。构造器方法只有在创建对象的时候调用——对于一个对象而言,他的构造器只能
调用一次。构造器也可以重载,就像方法一样,定义可以传入不同方法的构造器,这也是构造器方法
的主要用途:在创建对象时,初始化某些属性值。
要注意的是,每个类都会有一个默认的无参构造器,但如果重新写了一个有参数的构造器,则默认的
无参构造器不能够调用,除非在类定义中显示声明。
6.方法的重载与重写
在一个类中,可以定义多个同名,但参数类型和数量方法不同的方法,叫做方法的重载。
例如:在Student类中,可以定义方法,代码如下。
public void study (int hour,String k){
km=k;
scro+=hour/3;
if(scro>5){
toSleep(hour/3);
}
}
public void study(int hour){
System.out.println("不知道在学什么");
}
public void study(){
System.out.println("什么都不学");
}
}
而方法的重写是指子类在继承了父类以后,重新定义父类中的方法,即重写父类方法体的内容
7.类的继承,接口的实现,抽象类的继承
继承的概念
在编写一个类的时候,所有的学生(无论大小中)都可以是一种类型的,即定义为一个简单的Student类
代码:
//所有一般类学生的定义
public class Student {
public String name;
public void setName(String name){
this.name = name;
}
public void study(){
System.out.println(name+"在学习");
}
}
但这个系统给某个大学使用时,就会出现问题——我们需要再定义一个大学生类,可以肯定的是,大学生中也有学习的方法,学分,名字属性,但具体的学习方法却是和一般学生是不一样的,所以我们就没必要再定义一个大学生类把这些代码再敲一遍,那么我们就可以定义一个学生类,让它继承Student类,因为不管什么学生都有study()这样一个方法。
代码示例:
public class UNStudent extends Student{
}
OK,通过extends 关键字,我们就免去了重写代码的麻烦,在UNStudent中就自动继承到了它的父类中的方法和属性。
代码示例:public class Test {
public static void main(String[] args){
UNStudent stu1 = new UNStudent();
stu1.setName("我是大学生");
stu1.study();
}
代码执行结果: 我是大学生在学习
类,接口,抽象类的特点,区别
普通类中只有普通方法,
接口中全部都是抽象方法,
而抽象类中可以有抽象方法,也可以有普通方法。
继承规则:
a、一个类(抽象类)只能继承一个父类(单根继承)
public class A{}
public class B extends A{}
b、一个接口可以继承多个接口
public interface C{}
public interface D{}
public interface E extends C,D{}
c、一个类可以实现多个接口
public class F implements C,D{}
d.一个类可以在继承一个类之后在实现多个接口
public class G extends A implements C,D{}
G g1 = new G();
A g2 = new G();
C g3= new G();
如何定义接口,接口的特点,如何实现接口?
接口的定义格式是public interface 接口名
我们知道,定义一个类无非是两个用途:生成对象调用其方法,
或者用作给其他类来继承(作父类)
在后一种用途上,根据类的继承规则,即使子类中不重写父类的方法,也会调用父类中的方法,
但在特定的用途上,我们要求子类必须重写父类的方法,这就需要定义接口,假设我们要编写
一个绘图工具,这个程序就会存在一个形状的概念——这一类对象就知道如何绘制出自己,我们
就可以定义一个形状类的接口。
作为一个接口,它的里面必须没有任何方法体的具体实现,所以不能直接使用接口创建
对象。方法前无论是否写了public限定符,接口中的方法都是public型的。
接口中还可以定义属性,但接口中的属性是常量值,即不可再改变的。
代码示例:
public interface NetJavaShape {
public final static String compName="蓝杰";
//接口中定义的方法X1,Y1和X2,Y2代表要绘制的两个坐标点各自的XY坐标
public void draw(int x1,int y1,int x2,int y2);
}
8.子类继承父类之后,在子类的构造方法中默认会调用父类无参数的构造方法
如果父类没有无参数的构造方法,则必须要重写子类的构造方法,在子类的
构造方法中调用父类的某个构造方法。
9.swing界面的开发
a.组件的基本用法
首先声明一个组件对象,例如
javax.swing.JPanel L1= new javax.swing.JPanel();
让后让容器组件 将它add上去。
容器组件:容器中有重量级容器(例如JFrame)和轻量级容器(如JPanel),容器组件上面可以加上其他的组件,特例是重量级容器上面不可以加上重量级容器。
元素组件:
b.组件的继承体系
所有的类都继承自一个最大的类Object,所有的组件都继承自Component
10.事件的监听机制
ActionListener ActionEvent
MouseListener MouseEvent
MouseMotionListener MouseEvent
事件的监听器是指某一个监听器类实现ActionListener,MouseListener,MouseMotionListener等接口,就可以在某一个动作发生时,将信息传到相应的监听器类中,执行监听器类中的各种方法,达到“触发”的作用。
代码示例:
public class DrawListener implements java.awt.event.MouseListener {
private int x1, y1, x2, y2;
private java.awt.Graphics g;
//在创建监听器对象的时候传入画布对象
public DrawListener(java.awt.Graphics g) {
this.g = g;
}
//监听器被触发时要执行的方法
public void mousePressed(MouseEvent e) {
// 得到鼠标按下时候光标的坐标
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
// 得到鼠标释放时候光标的坐标
x2 = e.getX();
y2 = e.getY();
// 画直线
g.drawLine(x1, y1, x2, y2);
g.drawRect(x1, y1, x2-x1,y2-y1);
}
//实现MouseListener中的其他抽象方法
public void mouseEntered(MouseEvent e) {
// System.out.println("mouseEntered");
}
public void mouseExited(MouseEvent e) {
// System.out.println("mouseExited");
}
public void mouseClicked(MouseEvent e) {
// System.out.println("mouseClicked");
}
}
然后可以在主类中创建一个监听器对象,然后让窗体对象或其他组件加上这个监听器,这样就给组件加上了监听机制。
//创建监听器对象
DrawListener dlis = new DrawListener(g);
//给窗体加上鼠标监听器
this.addMouseListener(dlis);
11.布局管理器
FlowLayout 流式布局
BorderLayout 边框布局
GridLayout 网格布局
Java的G界面定义是由awt类包和Swing类包来完成的,对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。
Java中的布局管理器类有:FlowLayout、BorderLayout、GridLayout、GridBagLayout等,
下面是他们的一些特点:
CardLayout 将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见
FlowLayout 将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置
GridLayout 形似一个无框线的表格,每个单元格中放一个组件
BorderLayout 将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件
GridBagLayout 非常灵活,可指定组件放置的具体位置及占用单元格数目
BoxLayout 就像整齐放置的一行或者一列盒子,每个盒子中一个组件
SpringLayout 根据一组约束条件放置子组件 \
实际操作过程中,可根据自己的需要来设置不同的布局管理器来满足各种要求和布局。
下面是代码示例:
在主类中(窗体类),假设设置窗体的布局为边框布局,则先创建一个BorderLayout的对象,再加上去即可
java.awt.BorderLayout f1 = new java.awt.BorderLayout();
this.setLayout(f1);
假设要加上一个网格布局:
也可以直接用对象去调用 setLayout的方法:
例如:
center .setLayout(new GridLayout(4,5,2,2));
java程序可以用记事本来编写,但是要保存为后缀为.java的文件才能被编译,运行叫javac的文件可以将java文件进行编译。
2.JDK,JRE,JVM关系,区别
JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比SUN的JDK高的多。
JRE:Java Runtime Enviromental(java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
JVM:Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
下图很好的表面了JDK,JRE,JVM三者间的关系:
http://dl.iteye.com/upload/attachment/364841/7dbc84af-e878-3718-beb5-6471ad99b995.gif
3.数据类型:
JAVA中数据类型总共有3种
基本类型(8种)
byte 8bit -128~127
char 16bit
short 16bit
int 32bit
long 64bit
float 32bit
double 64bit
boolean 8bit true/false
引用类型(类类型):每一个类(接口,抽象类)都是一种数据类型
数组类型:基本类型或者引用类型的集合
int[][] t; String[] str;
int t[][];
int[] t[];
2.面向过程,面向对象理解
面向过程就是在一件事中,只关心一件事情是如何发生的,
面向对象就是在一件事中,只关心是谁让这一件事情发生了。
就好比在一句话中面向过程就是句子中的谓语,面向对象就是主语或者宾语。
3.类与对象的关系分析
什么是对象?
简单的说,对象是现实世界中具体存在的事物或者实体,对象在面向对象编程中是核心,为程序提供实用的基础,为完成特定的任务而存在。
而通俗来说,类就是一组具有相同特征与行为的对象的集合。类是这组对象的模板,定义了这组对象的属性和方法。也可以说类就是把现实生活中具有相同特征和行为的一个群体抽象出来的概念。而对象则是实际存在的。对象通过调用类中的方法来改变自身的属性值。
4.如何定义一个类,如何创建对象,如何调用属性和方法
public class A{
public A(){
}
private int m;
public void n(){
}
}
A a = new A();
a.m=10;
a.n();
5.构造方法与一般方法的区别
构造器严格的说不算是”方法“,只是因为它也可以传入参数,构造器方法没有任何返回值的定义,
且必须与类名字相同。构造器方法只有在创建对象的时候调用——对于一个对象而言,他的构造器只能
调用一次。构造器也可以重载,就像方法一样,定义可以传入不同方法的构造器,这也是构造器方法
的主要用途:在创建对象时,初始化某些属性值。
要注意的是,每个类都会有一个默认的无参构造器,但如果重新写了一个有参数的构造器,则默认的
无参构造器不能够调用,除非在类定义中显示声明。
6.方法的重载与重写
在一个类中,可以定义多个同名,但参数类型和数量方法不同的方法,叫做方法的重载。
例如:在Student类中,可以定义方法,代码如下。
public void study (int hour,String k){
km=k;
scro+=hour/3;
if(scro>5){
toSleep(hour/3);
}
}
public void study(int hour){
System.out.println("不知道在学什么");
}
public void study(){
System.out.println("什么都不学");
}
}
而方法的重写是指子类在继承了父类以后,重新定义父类中的方法,即重写父类方法体的内容
7.类的继承,接口的实现,抽象类的继承
继承的概念
在编写一个类的时候,所有的学生(无论大小中)都可以是一种类型的,即定义为一个简单的Student类
代码:
//所有一般类学生的定义
public class Student {
public String name;
public void setName(String name){
this.name = name;
}
public void study(){
System.out.println(name+"在学习");
}
}
但这个系统给某个大学使用时,就会出现问题——我们需要再定义一个大学生类,可以肯定的是,大学生中也有学习的方法,学分,名字属性,但具体的学习方法却是和一般学生是不一样的,所以我们就没必要再定义一个大学生类把这些代码再敲一遍,那么我们就可以定义一个学生类,让它继承Student类,因为不管什么学生都有study()这样一个方法。
代码示例:
public class UNStudent extends Student{
}
OK,通过extends 关键字,我们就免去了重写代码的麻烦,在UNStudent中就自动继承到了它的父类中的方法和属性。
代码示例:public class Test {
public static void main(String[] args){
UNStudent stu1 = new UNStudent();
stu1.setName("我是大学生");
stu1.study();
}
代码执行结果: 我是大学生在学习
类,接口,抽象类的特点,区别
普通类中只有普通方法,
接口中全部都是抽象方法,
而抽象类中可以有抽象方法,也可以有普通方法。
继承规则:
a、一个类(抽象类)只能继承一个父类(单根继承)
public class A{}
public class B extends A{}
b、一个接口可以继承多个接口
public interface C{}
public interface D{}
public interface E extends C,D{}
c、一个类可以实现多个接口
public class F implements C,D{}
d.一个类可以在继承一个类之后在实现多个接口
public class G extends A implements C,D{}
G g1 = new G();
A g2 = new G();
C g3= new G();
如何定义接口,接口的特点,如何实现接口?
接口的定义格式是public interface 接口名
我们知道,定义一个类无非是两个用途:生成对象调用其方法,
或者用作给其他类来继承(作父类)
在后一种用途上,根据类的继承规则,即使子类中不重写父类的方法,也会调用父类中的方法,
但在特定的用途上,我们要求子类必须重写父类的方法,这就需要定义接口,假设我们要编写
一个绘图工具,这个程序就会存在一个形状的概念——这一类对象就知道如何绘制出自己,我们
就可以定义一个形状类的接口。
作为一个接口,它的里面必须没有任何方法体的具体实现,所以不能直接使用接口创建
对象。方法前无论是否写了public限定符,接口中的方法都是public型的。
接口中还可以定义属性,但接口中的属性是常量值,即不可再改变的。
代码示例:
public interface NetJavaShape {
public final static String compName="蓝杰";
//接口中定义的方法X1,Y1和X2,Y2代表要绘制的两个坐标点各自的XY坐标
public void draw(int x1,int y1,int x2,int y2);
}
8.子类继承父类之后,在子类的构造方法中默认会调用父类无参数的构造方法
如果父类没有无参数的构造方法,则必须要重写子类的构造方法,在子类的
构造方法中调用父类的某个构造方法。
9.swing界面的开发
a.组件的基本用法
首先声明一个组件对象,例如
javax.swing.JPanel L1= new javax.swing.JPanel();
让后让容器组件 将它add上去。
容器组件:容器中有重量级容器(例如JFrame)和轻量级容器(如JPanel),容器组件上面可以加上其他的组件,特例是重量级容器上面不可以加上重量级容器。
元素组件:
b.组件的继承体系
所有的类都继承自一个最大的类Object,所有的组件都继承自Component
10.事件的监听机制
ActionListener ActionEvent
MouseListener MouseEvent
MouseMotionListener MouseEvent
事件的监听器是指某一个监听器类实现ActionListener,MouseListener,MouseMotionListener等接口,就可以在某一个动作发生时,将信息传到相应的监听器类中,执行监听器类中的各种方法,达到“触发”的作用。
代码示例:
public class DrawListener implements java.awt.event.MouseListener {
private int x1, y1, x2, y2;
private java.awt.Graphics g;
//在创建监听器对象的时候传入画布对象
public DrawListener(java.awt.Graphics g) {
this.g = g;
}
//监听器被触发时要执行的方法
public void mousePressed(MouseEvent e) {
// 得到鼠标按下时候光标的坐标
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
// 得到鼠标释放时候光标的坐标
x2 = e.getX();
y2 = e.getY();
// 画直线
g.drawLine(x1, y1, x2, y2);
g.drawRect(x1, y1, x2-x1,y2-y1);
}
//实现MouseListener中的其他抽象方法
public void mouseEntered(MouseEvent e) {
// System.out.println("mouseEntered");
}
public void mouseExited(MouseEvent e) {
// System.out.println("mouseExited");
}
public void mouseClicked(MouseEvent e) {
// System.out.println("mouseClicked");
}
}
然后可以在主类中创建一个监听器对象,然后让窗体对象或其他组件加上这个监听器,这样就给组件加上了监听机制。
//创建监听器对象
DrawListener dlis = new DrawListener(g);
//给窗体加上鼠标监听器
this.addMouseListener(dlis);
11.布局管理器
FlowLayout 流式布局
BorderLayout 边框布局
GridLayout 网格布局
Java的G界面定义是由awt类包和Swing类包来完成的,对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。
Java中的布局管理器类有:FlowLayout、BorderLayout、GridLayout、GridBagLayout等,
下面是他们的一些特点:
CardLayout 将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见
FlowLayout 将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置
GridLayout 形似一个无框线的表格,每个单元格中放一个组件
BorderLayout 将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件
GridBagLayout 非常灵活,可指定组件放置的具体位置及占用单元格数目
BoxLayout 就像整齐放置的一行或者一列盒子,每个盒子中一个组件
SpringLayout 根据一组约束条件放置子组件 \
实际操作过程中,可根据自己的需要来设置不同的布局管理器来满足各种要求和布局。
下面是代码示例:
在主类中(窗体类),假设设置窗体的布局为边框布局,则先创建一个BorderLayout的对象,再加上去即可
java.awt.BorderLayout f1 = new java.awt.BorderLayout();
this.setLayout(f1);
假设要加上一个网格布局:
也可以直接用对象去调用 setLayout的方法:
例如:
center .setLayout(new GridLayout(4,5,2,2));