现在的位置: 首页 > 综合 > 正文

圣思园java视频笔记

2018年05月14日 ⁄ 综合 ⁄ 共 10089字 ⁄ 字号 评论关闭

Java 第一讲  Java SE入门

Java SE : Java Standard Edition
Java ME :  Java Micro Edition
Java EE :  Java Enterprise Edition


J2SE、J2ME、J2EE

JDK: Java Development Kit (Java开发必备)
JRE: Java Runtime Environment (Java 执行环境)

JDK 包含了 JRE。


Java程序的执行过程分为两步:
1.编译
2.执行

class 文件是字节码文件,程序最终执行的就是这个字节码(bytecode)文件。


编译命令: javac Text.java

执行命令:  java Text    (注意,Text后面是没有class的)


Java 是跨平台的语言,Java 真正执行的不是二进制代码,而已字节码

Java之所以能够跨平台,是因为JVM(Java Virtual Machine,Java虚拟机)是不能够跨平台的.


第二讲  原生数据类型(Primitive Data Type)
1.  windows系统用的工具: notepad,editplus,ultraedit,gvim
    Linux:vi,vim,gedit

2.  Java 中的数据类型分为两大类:
1).原生数据类型  (Primitive Date Type)
2).引用类型(对象类型) (Reference Type)

3.变量与常量:所谓常量,就是值不会变化的量;
              所以变量,就是值可以变化的量;

4.如何定义变量?

  变量类型 变量名;
       int a;
5.如何给变量赋值?

   变量名 = 变量值   (=表示赋值,将等号右边的值赋给了左边的变量)
        a = 2;
   Java 中使用==表示相等,等价于数学中得=。
6.综合变量定义与赋值。

 变量类型 变量名
 变量名 = 变量值

 int a;
  a =1;

 可以将上面两个步骤合二为一:
  变量类型 变量名 = 变量值;
       int  a = 1 ;

7.变量名:在Java中,变量名以下划线、字母、$(dollar)符号开头,并且后跟下划线,字母、$符号以及数字。总之,Java中的变量名是不能以数字开头。

8.关于计算机系统中的数据表示

位:bit(只有0,1两种状态),是计算机系统中最小的数据表示单位。
字节:byte (1 byte=8 bit)2^8=256;
1 KB = 1024 byte   2^10=1024;
1 MB = 1024 KB
1 GB = 1024 MB

9.注释.注释是给人看的,不是给计算机看的.Java中共有3种类型的注释

1).单行注释:以 //开头,//后面的所有内容都作为注释处理。
2).多行注释:以/*开头,以*/结束,中间的所有内容均作为注释处理.多行注释来源于C++.关于多行注释,需要注意的是,多行注释不能嵌套.
3).另一种多行注释.用于产生 Java Doc 帮助文档,暂不介绍.以/**开头,*/结束.

            
Java 中的原生数据类型共有8种:

1.整型: 使用int表示。
2.字节型:使用 byte 表示。(8位)(表示-128~127之间的256个数)
3.短整型:使用short表示.(16位).
4.长整型:使用long表示.(64位).

 

第三讲: 原生数据类型使用陷阱  (Pitfall of Primitive Data Type)

1.Java 中的原生数据类型共有8种:

5).单精度浮点型:使用float表示.所谓浮点型,指的是小数,也叫做实数.比如1.2;

6).双精度浮点型:使用double表示.双精度 表示的数据范围要比 单精度 的大.

7).字符串类型:使用char表示(char是character的缩写),所谓字符就是单个的字符表示,比如字母a,或者中文"张",外面用单引号包围上.比如char a='8';char b='张';

8).布尔类型:使用boolean表示.布尔类型只有两种可能值,分别为TRUE,FAlSE.

 

2.  Java 中的所有浮点类型默认情况下都是double类型!!!!不能将double类型的值赋值给float类型的变量..即便该double类型的值属于float类型的范围内也是不可以的.总之,能否成功赋值取决于等号右边的值类型与左边的变量类型是否一致.

3.如何将double类型的值赋值给float类型的变量?

答案就是(1)强制类型转换。将double类型强制转换为float类型。

  (2)  float a=1.2f;  (f表示float)
强制转换的语法: 类型 变量名 = (类型) 变量值 ;

4. 变量在使用前必须要声明类型,并且赋值。

5. 如下代码无法通过编译:
       int a = 1;
       short b = a;
   因为a是int类型,b是short类型,int类型表示的数据范围要比short类型大,不能将表示范围大的值赋给表示范围小的变量。

6. 如下代码可以通过编译:
       short a = 1;
       int b = a;
   因为a是short类型,b是int类型,int类型表示的数据范围要比short类型大,可以将表示范围小的值赋给表示范围大的变量。

7.总结:可以将表示范围小的值赋给范围大的变量,反之则不行,必须呀通过强制类型转换实现。


第四讲: 运算符(Opreator)
1. 当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型。比如,参与运算的变量中,有整型int,有双精度浮点型double,那么最后的结果类型就是double。

2. int a = 1;
   int b = 2;
   double c = (double) a / b;
   通过强制类型转换后,即可获得正确的结果0.5.

3.取模
   int a = -5;
   int b = 3;
   int c = a % b;//c = -2
取模的规律:取模的结果符号永远与被除数的符号相同

 
第五讲:运算符(续)  (Operator)

1.关系运算符: > ,< ,== ,!=,>=,<=;关系运算的结果是个boolean值.
2.逻辑运算符:重点讲解两个,逻辑运算符本身也返回一个boolean值
    1).逻辑与:使用&&表示,逻辑与是个双目运算符(即有两个操作数的运算符       ),只有当两个操作数都为真的时候,结果才为真;
    2).逻辑或:使用||表示,逻辑或也是个双目运算符,(只有当两个操作数都       为假时,才为假)
3.关于逻辑运算符的短路特性
    1).逻辑与:如果第一个操作数为false,那么结果肯定为false,所以在这种       情况下,将不会执行逻辑与后面的运算了.即发生了短路.
    2).逻辑或:如果第一个操作数为true,那么结果肯定为true,所以在这种情        况下,将不会执行逻辑或后面的运算了,即发生了短路.

4.关于变量的自增与自减运算.
    1).关于int b = a ++;作用是将a的值先赋值给b,然后再让a自增1;
    2).关于int b = ++ a;作用是将a的值先自增1,然后将自增后的结果赋给b;

 

第六讲: 流程控制语句(Flow Control Statement)

1.条件运算符(三元表达式),形式为:
 type d = a(boolean值) ? b : c;
 int d = 1<2 ? 3:4;
2.轻量级的文本编辑器:UltraEdit、Editplus、vi、vim、gvim;

3.流程控制语句 if 的用法为:
     
  形式1:  if (布尔表达式)
 {
  //执行代码
 }


   形式2:  if (布尔表达式)
  {
   //执行代码
  }
     else
  {
   //执行代码
  }

 


  形式3:  if (布尔表达式)
 {
  //执行代码
 }
    else if (布尔表达式)
 {
  //执行代码
 }

4. switch 语句,使用形式为:

 switch (变量) //此处的变量类型就目前所学的内容来看,只能为4种类型
 {
  case 常量1:
   //执行代码
  break;
  
  case 常量1:
   //执行代码
  break;

  .
  .
  .
  default;
   //执行代码
 }

 虽然case语句中的break是可选的,但在绝大多数情况下,如果没有break,程序  逻辑就会发生错误,因此,通常情况下都要加break.

 

第七讲 :  流程控制语句 续(Flow Control Statemen .cont)

1.Java中的循环控制语句一共有3种,分别是while,do...while以及for循环。
2.while 循环,形式为:
 while(布尔表达式)
 {
  //执行代码
 }

3.do...while循环,形式为:
 do
 {
  //执行代码 
 }
 while(布尔表达式);
 
4.while 与do...while之间的区别:如果布尔表达式的第一次判断为false,那么while循环一次都不执行;do...while循环则会执行一次,如果布尔表示式第一次判断为true,那么while循环与do...while循环等价..

5.for循环,形式为:
 for(变量初始化;条件判断;步进)
 {
  //执行代码
 }

 for 循环的执行过程:
 1).执行变量初始化
 2).执行条件判断.如果条件判断结果为假,那么退出for循环,开始执行循环后 面的代码;如果条件判断为真,执行for循环里面的代码.
 3).执行步进.
 4).重复步骤2.


Java SE 应用开发详解系列之二
第八讲 :   深入理解面向对象程序设计(Inside Object Oriented Programm)

1.break语句:经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。

2.continue语句:经常用在循环语句中,用于跳出当前的这份循环(或者是跳出本次  循环),开始下一次循环的执行。

3.break与continue可以搭配标签使用,在实际开发中,根本没有人会将break与   continue搭配标签来使用。

4.面向对象程序设计(Object Oriented Programming,OOP;Object Oriented Design,OOD).
 
 什么是面向对象? 在面向地想程序设计中有两个重要的概念:类(class)与对象(object).

5.类: 类是一种抽象的概念,类中包含了数据(通常使用名词来表示)与数据的操纵(  通常使用动词来表示).比如说人就是一种抽象的概念.人具有姓名,年龄, 身 高等数据,还有吃饭,跑步等操纵数据的动作.

6.对象: 对象是一种具体的概念,是类的一种具体表示方式,比如说人是一个类,而张三  ,李四,王五等具体的人就是对象.

7.类所包含的内容,类一共包含两部分的内容.
 a).数据,数据在类中称作属性(Property)或成员变量(Member Variable).
 b).对数据的操纵,这种操纵在类中称作方法(method).


第九讲 : 面向对象之封装

1.面向对象程序设计的三大基本特征:继承(Inheritance),封装(Encapsulation),多态(Polymorphism).

2.封装:类包含了数据与方法,将数据与方法放在一个类中就构成了封装.

3.如何定义类?

  修饰符 class 类的名字
  {
 //类的内容(包含了属性和方法)
  }

4.如何定义方法?
  
  修饰符 返回类型 方法名称([参数1,参数2,参数3..])
  {
 //方法体
   }

5.main 方法是整个java程序的入口点.如果类的定义中没有main方法,则程序无法执行.

6.方法的定义不能嵌套,也就说不鞥在一个方法中定义另一个方法.方法只能定义在类中

7.关于方法的执行:首先需要定义方法,接下来就可以使用方法(调用方法),当方法被调用完毕后,方法可以返回值.方法到底是否返回值是由方法的定义决定的.

8.如何生成对象? 通过类来生成对象(通常使用new关键字来生成对象).

  public class Person
  {
 
  }
  
  类名 变量名 = new 类名();

  Person person = new Person();
  Person person2 =new Person();
  Person person3 =new Person();

9.方法调用要通过对象来完成。方法调用形式是:
  对象变量.方法名([参数值1,参数值2,参数值3,...]);

10.关于方法的注意事项:
  1).在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致.
  2).在方法调用时,给方法传递的参数需要与方法定义的参数类型保持一致.(参数个数     一致,参数类型一致).
  3).方法定义时的返回类型与被接受方法返回值的变量类型保持一致.

11. public int add(int a,int b)
    {
 return a+b;
    }

    方法定义时的参数叫做形式参数.

    int a = test.add(8,3);

    方法调用时所赋予的具体值叫做实际参数.

12.关键字 void 表示方法不返回值.

13.如果方法不返回值,那么声明方法时使用 void关键字,在方法定义中可以有两种情况   实现不返回值
   1).不适用return语句;
   2).使用return,但return后面没有任何值或者变量,return后面只有一个分号,表示退出方法,返回到方法的调用端.
      使用方式
      return;


第十讲 :  面向对象设计之封装 续

1.类中的属性(property||attribute)又叫做成员变量(member variable)

2.对象(Object)又叫做实例(Instance).生成一个对象的过程又叫做实例化.

3.命名约定
  a).类:首字母大写,如果一个类名由多个单词构成,要求每个单词的首字母都大写.中     间不使用任何连接符,比如Person类,MemberTest类.

  b).方法:首字母小写,如果一个方法由多个单词构成,那么第一个单词字母全都小写,从第二个单词开始,每个单词的首字母大写。比如add,addThreeInt.

  c).属性:命名约定与方法相同.比如  age,ageOfPerson。

 


4.属性需要定义在类中,又叫做成员变量;而定义在方法中的变量叫做  局部变量。

5.如何定义属性?
  
  public class Person
{
 修饰符 类型 属性名称;
}

  如何使用属性?与方法一样,使用.运算符.首先需要生成类的实例,然  后使用实例+'.'的方式来使用属性.

  比如:

  Person person = new Person();
  person.age

6.局部变量使用前必须要声明并赋初值;而成员变量使用前必须要声明,但可以不赋初值。

7.成员变量与局部变量的联系与区别:
  a).无论是成员变量还是局部变量,使用前都需要声明(定义).
  b).对于局部变量来说,使用前必须要初始化;对于成员变量来说使用前     可以不初始化.如果没有初始化成员变量就开始使用,那么每个类型    的成员变量都有一个默认的初始值.
       
       byte、short、int、long类型的初始值为0
       float、double类型的初始值为0.0
       char类型的初始值‘\u0000’
       boolean 类型的初始值 false

8.引用类型(reference type):引用类型是用在对象上的.一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象,如果 一个对象被多个引用所指向,那么无论哪个引用对象的属性进行了修改,都会放映到其他的引用中.

 

第十一讲 : 面向对象之封装 续二 

1.如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性,但无论一个类有多少个对象,这些对象共用同一个方法。

2.关于方法参数传递的总结:对于java中得方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(pass by value)

3.什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象,比如:

 People people = new People();//争取
 People people = new Student();//错误

4.构造方法(Constructor):构造方法用于完成对象属性的舒适化工作,构造方法的特点:
 a).构造方法的名字必须与类名完全一致(包含大小写)
 b).构造方法没有返回值,连void也不能出现.
 c).如果在定义一个类的时候,没有为类声明构造方法,那么java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法).
 d).如果在定义一个类的时候,为类声明了构造方法,那么java编译器就不会再为类添加构造方法了.
 e).不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用.
 
5. new 关键字在生成对象时完成了三件事情:
 a).为对象开辟内存空间.
 b).调用类的构造方法.
 c).将生成的对象的地址返回.

6.默认的构造方法:构造方法没有参数且方法体为空.

7.使用new来生成对象的时候,new后面的小括号表示构造方法的参数列表.如果构造方法不接受参数,那么小括号中的内容为空.如果构造方法接受参数,那么小括号中得实际参数就要与构造方法中定义的形式参数一致(参数数量一致,参数类型一致,按照顺序逐一赋值).

 

第十二讲----第十八讲 : 基础回顾+方法重载剖析,继承剖析,多态剖析


栈:stack
堆:heap

1.类是一种抽象的概念,对象时类的一种具体表示形式,是具体的概念。先由类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。

2.类由两大部分构成:属性以及方法。属性一般用名词来表示,方法一般用动词来表示。

3.如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是 public 的,换句话说,定义的多个类可以都不是public的。

4.在java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型,参数传递方式统一为传值(pass by value)。java中没有传引用(pass by reference)的概念。

5.方法重载(Overload)。表示两个或多个方法名字相同,但方法参数不同。方法参数不同有两层含义:1)参数个数不同。2)参数类型不同。注意:方法的返回值对重载没有影响。

6.构造方法重载:只需看参数即可。如果想在一个构造方法中调用另一个构造方法,那么可以使用this()的方式调用,this()括号中得参数表示目标构造方法的参数。this()必须要作为构造方法的第一条语句。换句话说,this()之前不能有任何可执行的代码。

7.继承的剖析。(Inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫父类【基类,base class】,继承的类叫做子类),Java中得继承使用extends 关键字。

8.当生成子类对象时,Java默认首先调用父类的不带参数的构造方法。然后执行该构造方法,生成父类的对象,接下来,再去调用子类的构造方法,生成子类的对象。【要想生成子类的对象,首先要生成父类的对象,没有父类的对象,就没有子类的对象,比如没有父亲就没有孩子】。

9.super关键字:super表示对父类对象的引用。

10.如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法,而不会再去寻找父类的不带参数的构造方法。与this()一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他的可执行语句。

11.关于继承的3点:

 a).父类有的,子类也有
 b).父类没有的,子类可以增加
 c).父类有的,子类可以改变

12.关于继承的注意事项

 a).构造方法不能被继承
 b).方法和属性可以被继承
 c).子类的构造方法隐式地调用父类不带参数的构造方法
 d).当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用.
 e).super关键字必须是构造方法中的第一行语句.


13.方法重写(Override):又叫做覆写,子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。

14.方法重写 与 方法重载 之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。(与继承相关的)

15.当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因为此时父类对象已经构造完毕,先调用父类的run()方法还是调用子类的run()方法是根据程序的逻辑决定的.

16.在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承与java.lang.Object类(JDK提供的 一个类,Object类是Java中所有类的直接或间接父类)。

17.多态(Polymorphyism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象。例:Flower rose = new Rose();


Java lesson 2 :

1.多态:父类型的引用可以指向子类型的对象。

2.Parent p = new Child();当使用多态方式调用方:法时,首先检查父类中是否有sing()方法,如果没有则编译出错;如果有,再去调用子类的sing()方法。

3.一共有两种类型的强制类型转换:
  a).向上类型转换(upcast):比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。  
  
  Cat cat = new Cat();

  Animal animal = cat; //子类就是父类,所以不必要用强制类型转换。

  b).向下类型转换(downcast):比如将Animal类型转换为Cat类型。即父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。


4.抽象类(abstract class):使用了abstract关键字修饰的类叫抽象类。抽象类无法实例化,就是说, 不能new出来一个抽象类的对象(实例)。

5.抽象方法(abstract method):使用abstract关键字修饰的方法叫抽象方法。 抽象方法需要定义在抽象类中。对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。

6.如果一个类包含了抽象方法,那么这个类一定是抽象类。

7.如果某个类是抽象类,那么该类可以包含具体方法(有声明,有实现)。

8.如果一个类中包含了抽象方法,那么这个类一定要声明成abstract class,也就是说,该类一定是抽象类,反之,如果某个类是抽象类,那么该类既可以包含抽象方法也可以包含具体方法。

9.无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。

10.在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法,否则,该子类需要声明成一个 abstract class

11.接口(interface):接口的地位等同于class,接口中得所有方法都是抽象方法。在声明接口中得方法时,可以使用abstract关键字,也可以不使用。通常情况下,都会省略掉abstract关键字。

12.可以将接口看做是特殊的抽象类(抽象类中可以有具体的方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)

13,类可以去实现一个接口。实现使用关键字 implements 表示,代表了某个类实现了某个接口。

14.一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法,如果该类是个抽象类,那么就无需实现接口中的方法了。

15.Java是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号‘,’来分割。

16.多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。

17.static 关键字:可以用于修饰属性,方法,还可以修饰类(后续课程讲)。

18.static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也随着改变。如果一个成员变量是static的,那么我们可以通过类名.成员变量名的方式来使用它(推荐用这种方式使用它)。

 


public class TestHello
{
 public static void main(String[] args)
  {
   System.out.println("Hello,World~");
  }
}

 

抱歉!评论已关闭.