java基础入门学习阶段小结一

     ( 主要根据学习过程进行的总结,所以基础知识点的在结构安排上有点乱
1.java基础入门
  a)环境变量的配置
     找到jdk文件夹下bin目录所对应的路径,在计算机属性高级设置中进行环境变量的设置。
     变量名:Path     变量值:D:\Program Files\Java\jdk1.6.0_18\bin
  b)对类名、属性名、方法名以及常量名命名的时候需要注意什么?
     以其说要注意些什么,还不如说是打一开始就培养一个良好的编程习惯,为写出更优质量的代码打好基础。
    1.不能以关键字来命名,要有特定含义。
    2.类名:类名的首字母要大写,如果由多个单词组成,则每个单词的首字母要大写,
    3.只能包含数字字母和下划线,开始只能以字母或下划线开头。
    4.属性名:第一个单词的字母要小写,如果由多个单词组成,则从第二个单词开始的每个单词首字母要大些,只能包含数字、字母和下划线,开始只能以字母或下划线开头。
    5.方法名:和属性名的定义式一样的。
    6.常量名:每个字母都要大写。
  c)定义类名必须要和什么相同?
    类名必须和文件名相同,包括大小写(java是区分大小写)。
  d)Java编译和运行的命令与格式?
    编译的命令:javac 文件名.java
   运行的命令:java  文件名
  e)Java中的基本数据类型  
    int                32位
    short              16位
    long               64位
    double             64位
    float               32位
    boolean            true和false
    byte               8位           -128-127
    char               16位
    char c = ‘中’;
    每一个基本数据类型,都有一个对应的封装类型,位于java.lang包下。
    bolean类型对应着Boolean类;
    Byte类将基本类型byte的直包装在一个对象中;
    char类型对应着Charater类;
    double类型对应着Double类;
    float类型对应着Float类;
    int类型对应着Integer类
    Long类型对应着Long类;
    Short类型对应着Short类;
    除了char类型外,其他7种数据类型对应的封装类还提供了对应的数据基本类型和String间相互转换的多种方法。
  f)Java中有哪几种数据类型?
    1.基本数据类型(原始类型)
        即上面提到的8种基本数据类型
    2.引用类型(类类型,对象类型)
  g)String的常用方法有哪些?
    1.string是用class定义的类,但是因为String会经常用到,在JDK中对String做了特殊处理,它的使用方式和基本数据类型是一样的。
    2.查看String的API文档,把常用的方法总结出来。
1)charAt(int index):返回指定索引处的char值
2)lastIndexOf(int  ch):返回指定字符在此字符串中最后一次出现处的索引
3)lastIndexOf(int  Srting, int  fromIndex):从指定的索引开始反向收索,返回指定字符串在此字符串中的最后一次出现处的索引
4)compareTo(String  anotherString):按字典顺序比较两个字符串
5)compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写
6)concat(String str):将指定字符串连接到此字符串的结尾
7)contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true
8)endsWith(String suffix):测试此字符串是否以指定的后缀结束
9)equals(Object anObject):将此字符串与指定的对象比较
10)getChar(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符从此字符串复制到目标字符数组
11)indexOf(int ch):返回指定子字符串在此字符串中第一次出现指定字符处的索引
12)indexOf(int ch, int fromIndex):从指定的索引开始,返回指定子字符串在此字符串中第一次出现指定字符处的索引
13)intern():返回字符串的规范化表示形式
14)isEmpty():当且仅当length()为0时返回true
15)legth():返回此字符串的长度
16)subString(int beginIndex, int endIndex):返回一个新的字符串,它是此字符串的一个子字符串
17)toCharArray():将此字符串转换成一个新的字符数组
18)toLowerCase():按默认语言环境的规则将该String中的所有字符都转换成小写形式
19)toUpperCase():按默认语言环境的规则将该String中的所有字符都转换成大写形式

2.类和对象
  a)类的定义
    类是具有相同特征和相同行为对象的抽象,或说是具有共同的属性和行为特征的事物的集合。

  b)对象的定义
    对象是类的具体实现。

  c)定义类的格式
    Public  class 类名{
Private 数据类型  属性名;
Public 构造函数名(参数列表){
//函数体
    }
    Public 返回值类型 方法名(参数列表){
//方法体
    }
  d)创建对象的格式
    类名  对象名  =  new  构造函数名(参数值列表);
调用对象方法的格式:
对象名.方法名(参数值列表);

  e)方法的分类
    按返回值划分
        有返回值的方法和无返回值的方法
    按参数划分
        有参数的方法和无参数的方法

  f)方法的重载
    要实现重载必须要满足的条件有:
        1.方法名相同
        2.参数类型和参数的个数要不同。

    实现了方法重载后,如何调用?
        调用的时候,会根据你所传递的参数个数以及类型来决定最终调用的方法。
    子类是否可以重载父类的方法?
        子类可以重载父类的方法,如下代码:
class a{
            public void test( int c,int d){ }
}
        class b extends a{ 
public void test( string str,int c)  {}
}
class c{
Public static void main(String[] args){
b b1 = new b();
b.test(1,2) //call a test
b.test("haha",3)//call b test
}
        }

  g)构造函数
    1.构造函数不能有返回值。
    2.函数名必须和类名相同
    3.如果定义了构造函数,则默认的构造函数将被覆盖,不可以在使用默认的构造函数。
    4.构造函数可以实现方法的重载。
    5.构造函数调用构造函数的时候,可以使用this进行调用。
    6.构造函数是用来创建对象的。
    7.构造函数每调用一次就会创建一个新的对象。
    构造函数和普通方法的区别?
    1.一般方法不能和类名相同
    2.构造函数不能被直接调用,必须通过new运算符在创建对象的时候才会被自 动调用,一般方法在程序执行到它的时候被调用。
    3.编译器会提供一个默认的构造函数,而一般方法不存在这样的特点

  h)值传递
      值传递适用于基本数据类型。
    传递的方式?
      直接将一变量中的数据拷贝到另一变量中,两变量中的数据在栈中具有不同的存储空间
  i)引用传递
      引用适用于引用类型。
    传递的方式?
      将一变量在堆空间存储数据的首地址拷贝给另一变量,对其中一个变量中的数据进行操作时,另一变量中的数据也会改变。

  j)this关键字
    this关键字表示对象本身,当前是哪一个对象在调用方法,那么this关键字就表示当前的对象。

3.类的继承
  a)为什么需要继承?
    可以拥有父类的属性和方法,补充自己的特定的方法,可以避免不必要的定义。
    降低代码的冗余,提高了代码的重用性。更符合了现实生活中的概念。

b)继承的语法格式
    Public class  子类名 extends  父类名{

    }

  c)子类继承到父类的哪些方法和属性
      父类中所有的方法都能被子类继承到,但是不是所有的方法都能被子类调用。
    1.子类和父类在同一个包下
      除了私有的属性、方法以及所有的构造函数不能被调用,其他的都可以直接被子类调用。
    2.子类和父类不再同一个包下
      只有公有的方法和属性能被子类直接调用。

    如果创建一个子类的对象,那么父类的对象是否被创建了?
    答曰:父类对象不被创建

(载自天涯问答)1、子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。这个地方我说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法),初始化方法是由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如 private int i=0;private Date date=new Date();等等,
    第二个部分是由初始化块组成,例如:
        public class Test{ private int i=0;//初始化第一部分
         //以下大括号内为初始化第二部分
        { this.i=4; \\do something...... }
       }
    第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中(这里说的复制其实应该说是编译,不过为了让你更好理解所以如此说).那么说初始化方法如何追述其父类的,这也关系到初始化方法的结构,初始化方法的执行顺序以及结构就如上所说,但是每个初始化方法的第一个执行指令就是调用另外一个初始化方法,这个初始化方法可能是自身类某个初始化方法,例如你的构造函数中第一句有类似this(...)这种语句,那么初始化方法就会调用自身类的指定构造方法;如果你的构造方法中没有指定构造方法调用,那么初始化方法会默认调用父类无参数初始化方法,如果你的子类第一句为 super(....),那么初始化方法会调用父类指定初始化方法。这种调用过程会递归进行调用,直到这个类是java.lang.Object类。调用初始化方法并不代表会生成对象,你的java代码中出现new关键字加上构造方法的调用,只会生成一个对象,其父类对象不会生成,所以调用父类为抽象类的构造方法完全是合理的。而且初始化方法对于虚拟机来说只是一个名称叫做" <init>"的普通方法,区别只是生成对象以后调用而已(sun 的jdk私有包中有绕过构造方法生成对象的方式,可以证明之上说法,具体如何我这里不陈述)。
    抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象时抽象类中按需求初始化抽象类中的字段以及执行一些初始化代码。其实并不是一定要生成某个类的实例才调用构造方法,子类也需要调用父类构造方法。而生成实例也并不一定会调用构造方法,在某些特殊实现中或者特殊情况下,生成实例不会调用构造方法。而调用了构造方法也不一定就生成了一个实例,但是那一定是一个实例调用的,就像一个普通的实例方法一样。

  d)方法的重写
    必须满足的条件:
    1.必须要存在继承关系
    2.方法名,返回值类型,参数个数以及参数类型都必须要和父类的相同。
    3.方法的访问修饰符必须要大于或者等于父类的访问修饰符。

  e)自动转型
    必须要存在继承关系。自动转型对象可以操作子类隐藏的成员变量,也可使用子类重写的方法。自动转型的对象操作子类重写的方法,其作用等价于子类对象去调用这些方法。
    格式:
      父类名  对象名  =  new  子类构造函数(参数值列表);
     子类名  对象名B  =  new  子类构造函数(参数值列表);

     方法名(对象名B);

     Public void 方法名(父类名  对象名){

    }
    缺点:不能操作子类新增的成员变量,不可以调用子类特定的方法。
    优点:增强程序的可拓展性

  f)多态
    方法的重载,方法重写,继承,自动转型等形成多态。
    把不同的子类对象当做父类对象来看,可以屏蔽不同子类间的差异,而父类对象又可以跟据当前赋值给它的子类的特性完成特定的方法。通俗讲就是,父亲的行为象儿子。
  g)接口
    定义接口的格式:
    Public  interface  接口名{
//定义常量的格式
Public static final 数据类型 常量名 = 值;
//定义方法1
Public abstract 返回值类型 方法名(参数列表);
         //定义方法2
abstract 返回值类型 方法名(参数列表);
         //定义方法3
         返回值类型 方法名(参数列表);
    }
    实现接口的格式:
    Public class 类名 implements 接口名{
//必须重写接口中所有的方法
    }
    接口可以继承接口。Public interface 子接口 extends 父接口, 父接口,…{}

  h)抽象类
    定义抽象类的格式:
    Public abstract 抽象类名  extends 类名  implements 接口名{
Public abstract 返回值类型  方法名(参数列表);
    }
    如果抽象类实现接口,那么可以不可以不实现接口中所有的方法?
    答:可以

    抽象类是接口和类的集合。
    抽象类只能被类或者抽象类继承。
    接口和抽象类都不能用来创建对象。

    接口、抽象类和类的区别?
    答:
      抽象类在java语言中体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“is a”的关系,即父类与派生类在概念本质上应该是相同的(这在平时的练习中要谨记)。但对接口来说则不然,并不需要接口的实现者与接口定义在概念本质上是一致的,仅仅是实现接口定义的契约而已。

4.Java的图形界面和事件
  a)Java的图形界面有几套?
    awt
    swing

    为什么要使用swing,而不使用awt ?
    答:
      Swing是由纯java代码写的,因此swing解决了java窗口类无法跨平台操作的问题,使窗口功能也具有跨平台与延展性的特性,而且swing不许需占用太多系统资源。
而awt具有C语言的成分,若想改动awt的窗口,必须手动编写C语言的代码,然后再搭配awt的native code 与JDK函数库,遇到不同平台时又要重新编写native code,耗时又耗资源。
  c)所有的图形界面都是从哪一个类继承的?
    Object是java所有的类的父类。
  d)事件流程
    1.寻找事件源
    2.给事件源添加监听器方法
    3.重写监听器类
    4.创建监听器类的对象,并绑定到事件源的监听器方法中。
  e)常用的监听器
     1.动作监听器  ActionListener
    2.鼠标监听器  MouseListener
    3.鼠标拖动监听器  MouseMotionListener
    4.鼠标的适配器   MouseAdapter
    5.键盘等监听器

    ActionEvent和MouseEvent


5.数组和队列
  a)数组
      数组是一种线性的数据结构,如果你指定了数组的类型,那么数组的类型就已经决定了。
    一维数组
      定义一维数组的格式:四种
        数据类型  []  数组名  = new  数据类型[长度];
       数据类型  []  数组名  = {参数列表};
       数据类型  []  数组名  = new  数据类型[]{参数列表};
       数组类型  [] 数据名;
       数组名  = new  数据类型[长度];

    操作数组是通过什么?
        下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。

    多维数组
        下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
    定义二维数组的格式:四种
       数据类型  [][]  数组名  = new  数据类型[行][列];
      数据类型  [][]  数组名  = {{参数列表},{…},..};
      数据类型  [][]  数组名  = new  数据类型[][]{{参数列表},{…},..};
      数组类型  [][]  数据名;
      数组名  = new  数据类型[行][列];

    下标可以操作数组中的每一个元素,可以通过length属性获取数组的长度。
        获取行的总数格式:数组名.length;
       获取列的总数格式:数组名[i].length;

    数组的缺点:不能改变数组的大小

  b)队列
    用自定义队列来实现数组不能改变大小的问题。
    实现自定义队列一个。要可以通用。
    E  泛型
    数组必须是Object的类型。

6.重绘
    1.数据的封装
    2.Paint方法重写 
    3.Super关键,可以调用父类的方法。

7.五子棋
    1.前期基础的综合应用
    2.二维数组的使用
    3.程序结构的安排
    4.接口的运用

你可能感兴趣的:(java)