Java基础总结
1.java文件的基本结构
编译-->运行
1)编译:.java源文件-->Javac编译-->.class文件(二进制代码)
2)运行java程序-->Jvm装载文件-->Jvm运行类文件
?
?
2.java中的数据类型
1)基本数据类型
<1>.byte字节型??8bits
<2>.int??整 形?32bits
<3>.short短整型?16bits
<4>.long长整形?64bits
<5>.char字符型?16bits
<6>.float浮点型?32bits
<7>.double ?双精度浮点型 ? 64bits
<8>.boolean ? ?布尔型 ? ? ?true/flase
附:①自动转型:小范围的类型值可以通过赋值运算直接转换为大范围的原始类型
?? byte-->short-->char-->int -->long-->float-->double
?? ? ?②强制转型:将大范围类数据类型转化为小范围的数据类型(注:不应超过小范围数据类型的表示范围)
??
?? float f = 1003.26 ;
?? double d = f ;//自动转型
?? int ?i = (int) d ;//强制转型
?? byte b = (byte) i ;?//错误,强制转化时不应超过小范围数据类型的表示范围
???
2)数组类型:详见下文
?
3)引用类型(类类型):自定义类、java中已定义的类(所有类的父类:Object)
?? ? ? ? ? 基本类型 ? ? 类类型
?? ??int ? ---->Integer ? ? ? ? ? ?
例: ?/**
??* 定义一个整形类的对象
??* 优点:可以调用整形类中定义的函数 ?
??* 缺点:占内存多
???*/
?Integer te = new Integer(10);
????
????char ?--->Character
?? ?? ?byte ?--->Byte
?? ? ? ? ? ?... ? ? ?--->...
?
3.类与对象的关系分析
1)类是一个模板:类是一组对象的抽象,提取了这些对象的共同点,类中定义了具体对象所共有的方法和属性,通 ? ? ? ?过这个模板生成具体的对象,调用每个对象自己的方法,改变的就是具体对象的属性值
2)对象是类的具体事例:通过类,可以创建多个对象
Student st1 = new Student();
?
4.如何定义一个类:属性+方法
?
/**
?* 学生类
?* @author hpw
?*
?*/
?
public class Student {
/**
* 设置学生姓名及学号
*?
* @param name
* ? ? ? ? ? ?:姓名
* @param num
* ? ? ? ? ? ?:学号
*/
public void setName(String name, int num) {
this.name = name;
this.num = num;
}
?
/**
* 学习的方法
*/
public void study() {
scro++;
System.out.println(name + "学习中!学号为:" + num);
}
?
/**
* 玩的方法
*/
public void play() {
scro--;
System.out.println(name + "正在玩!学号为:" + num);
}
?
/**
* 统计分数的方法
*/
public void addscro() {
System.out.println(name + " 学号为:" + num + " ?学分为:" + scro);
}
?
// 学生的名字属性
private String name;
// 学生的学号属性
private int num;
// 学生的学分属性,初始化为0
private int scro = 0;
}
?
?
5.创建对象的方式
1)无参:类名+对象名 = new 类名()
?? 有参:类名+对象名 = new 类名(参数1,参数2,…)
2)类名+对象名;
?? ? 对象名=new 类名()/new 类名(参数1,参数2,…);
?
Student st1=new Student();
等价于:Student st1;
?? ? st1=new Student();
?
6.构造方法的作用,特点,构造方法与一般方法的区别
1)作用:在创建对象时,就可以初始化对象内部属性的值
2)特点:构造方法没有任何返回值的定义,而且方法名必须与类名字相同,创建对象时,构造方法只被调用一次
注:每个类都有一个默认的无参构造器,但如果重写了一个有参构造器,则无参构造器不被调用,除非在类中显示声明
3)与一般方法的区别:
①构造方法是在创建对象时被调用,而一般方法是执行对象的特定行为时被调用
②构造方法与类名相同,一般方法不能与类名相同
③构造方法无返回值,一般方法有返回值
?
7.为什么需要继承?如何去继承?继承到了什么?
8.类,抽象类,接口的特点,区别
9.方法的重载与重写
10.自动转型与强制转型
?
以上详见博文 《类的继承,接口》:http://hu19911021-163-com.iteye.com/blog/1066352
?
11.多态的理解
??1)使用多态之后,当需要增加新的子类类型时,无需更改父类,程序的可扩展性及可维护性增强
2)多态具有表现多种形态的能力
??3)对同一个指令,执行不同的操作,调用不同的方法
?
12.常用的界面开发组件
1)容器类:位于 javax.swing 下的 : JFrame(窗体类) ? JPanel(面板类)
?位于 java.awt 下的 :?Frame(窗体类) ? Panel(面板类)
2)组件类:?① javax.swing②?java.awt
?? ? ? ???JLabel?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??JLabel?? ? ? ? ? ? ? ? ? ? ? ??标签类
?? ? ??JTextField?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JTextField?? ? ? ? ??? ? ? ??输入框类
?? ??????JButton?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JButton?? ? ? ? ? ? ? ? ? ? ??按钮类
?? ? ? ? ? ? ? ? ? ?JComboBox?????????????? ? ? ? ? ? ? ????JComboBox?? ? ? ? ? ? ??下拉列表类
?? ? ? ? ? ? ? ? ? ?JCheckBox?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??JCheckBox?? ? ? ? ? ? ? ??复选框类
3)布局器:流式布局器 ?位于 java.awt.FlowLayout 下
?
13.事件监听机制的理解
?? ? ? 1)找到监听的事件源对象
?? ? ? 2)根据需要监听的事件实现对应的监听器接口
?? ? ? 3) ?创建监听器对象
?? ? ? 4)将监听器对象绑定在事件源对象上
14.数组
1)一维数组:int t[] = new int[10]; ?? ? ? ? ? ??int t[] = new int[]{1,2,3,4,5,6}; ?? ? ? ? ? ? ? ? ?int t[] = {1,2,3,4,5,6}; 2)二维数组:int[][] a = new int[10][8];?? ? ? ? ? ? ? ? ? ? int[] a[] = new int[10][8];
?
15.队列:长度可变的数组
?
private String[] str=new String[0];/** * 往数组中添加元素 * @param s:添加的元素 */public void add(String s){//使数组元素+1String[] str1=new String[str.length+1];//将添加的元素放到最后str1[str1.length-1]=s;for(int i=0;i<str.length;i++){str1[i]=str[i];}str=str1;}/** * 获取数组元素 * @param index:要获取的下标 * @return */public String get(int index){String s=str[index];return s;}/** * 求数组的长度 * @return */public int size(){return str.length;}/** * 移除数组中的一个元素 * @param index */public void remove(int index){String[] str1=new String[str.length-1];//下标前的元素for(int i=0;i<index-1;i++){str1[i]=str[i];}//下标后的元素for(int i=index-1;i<str.length-1;i++){str1[i]=str[i+1];}str=str1;}/** * 向数组中插入一个元素 * @param s:要插入的元素 * @param index:要插入的下标 */public void insert(String s, int index){String[] str1=new String[str.length+1];//下标前的元素for(int i=0;i<index;i++){str1[i]=str[i];}str1[index]=s;//下标后的元素for(int i=index;i<str.length;i++){str1[i+1]=str[i];}str=str1;}/** * 修改指定位置的元素 * @param s:修改后的元素 * @param index:要修改元素的下标 */public void modify(String s,int index){str[index]=s;}
?
?
泛型队列:
?
private Object[] str=new Object[0];/** * 往数组中添加元素 * @param s:添加的元素 */public void add(E e){//使数组元素+1Object[] str1=new Object[str.length+1];//将添加的元素放到最后str1[str1.length-1]=e;for(int i=0;i<str.length;i++){str1[i]=str[i];}str=str1;}/** * 获取数组元素 * @param index:要获取的下标 * @return */public E get(int index){E e=(E)str[index];return e;}/** * 求数组的长度 * @return */public int size(){return str.length;}/** * 移除数组中的一个元素 * @param index */public void remove(int index){Object[] str1=new Object[str.length-1];//下标前的元素for(int i=0;i<index-1;i++){str1[i]=str[i];}//下标后的元素for(int i=index-1;i<str.length-1;i++){str1[i]=str[i+1];}str=str1;}/** * 向数组中插入一个元素 * @param s:要插入的元素 * @param index:要插入的下标 */public void insert(E s, int index){Object[] str1=new Object[str.length+1];//下标前的元素for(int i=0;i<index;i++){str1[i]=str[i];}str1[index]=s;//下标后的元素for(int i=index;i<str.length;i++){str1[i+1]=str[i];}str=str1;}/** * 修改指定位置的元素 * @param s:修改后的元素 * @param index:要修改元素的下标 */public void modify(E s,int index){str[index]=s;
}
?
18.值传递与引用传递的理解
1)值传递:通过复制号(=)进行传递,传递后双方不再建立有联系,一方的改变不影响到另一方
2)引用传递:引用传递传递的是地址,传递完成后,双方地址相同,一方发生改变,因地址相同,另一方也 ? ? 会发生相应的改变
?
?
?
?
?
?