当前位置:文档之家› java自学笔记

java自学笔记

什么是jdk

即java develop kit java开发工具包

J2se桌面开发

J2ee企业开发

J2me手持开发例如:手机

Java的特点

1.简单的

2.面向对象的

3.健壮的

4.安全的

5.解释的

6.与平台无关的

7.多线程的

8.动态的语言

1.简单的

最初是为了控制家电而设计的一种语言

2.面向对象的

3.健壮的

有垃圾内存回收机制

Java是一种强类型语言

4.安全的

5.解释的java编译成字节码在由虚拟机上运行

6.与平台无关跨平台它是用java虚拟机来实现的

7.多线程

8.动态的

Java源文件的编译过程编译成字节码再由虚拟机执行

Java解释器的执行过程分三步1。代码的装入

2。代码的效验

3。代码的执行

Java字节码的两种执行方式

1.即时编译方式解释器先将字节码编译成机器码,然后再执行该机器码2.解释执行方式

类class 类名{}

Class main{

}

Javac main.java

Jar是压缩文件用rar可以打开,内部是java和class文件后缀的文件

用jar命令来压缩文件

例如:jar 自定义一个jar文件名.jar 给出要压缩的文件名.class

Jar cvf classes.jar foo.class bar.class

C创建新的归档文件

F指定归档文件

V在标准输出中生成详细输出

编译java文件成字节码

用javac命令例:javac编译器java源文件

Javac cc.java

一个java文件必须有一个main的主函数他的格式如下

Public static void main(String[] args){

}

一个java文件中只能由一个public类否则出错

Public是公共访问权限

例:

Public class 类名{

}

编译时文件名大小写是不敏感的

运行时文件名大小写是敏感的

运行java文件

例:

Java 类名称

运行时用的java命名他执行的是一个点.class 的文件,它就是编译文件

1.在软件中,类就是一个模板,它定义了一个通用与一个特定种类的所有对象的状态(变量)和行为(方法)

2.类是创建对象的模板,对象是类的实例。

This关键字指向对象本身

New对象的作用

1.为对象分配内存空间

2.引起对象构造方法的调用

3.为对象返回一个引用

我们不能直接调用构造方法,必须通过new关键字来调用,从而创建类的实例。

Java的类都要求有构造方法,如果没有定义构造方法java编译器会为我们提供一个缺省的构造方法。

各种数据类型的默认值为

1.数值0

2.Boolean false

3.Char \0

4.对象null

5.

方法的重载重载读cong zai

重载构成的条件:方法的名称相同,但参数类型或参数个数不同才能构成方法的重载

特殊变量this

1.This代表对象本身

2.当类中有两个同名变量可以使用this关键字来区分成员变量和局部变量。

3.使用this简化构造函数的调用

4.关于实例方法和实例数据成员的进一步说明

一个类所有实例(对象)调用的成员方法在内存中只有一份拷贝尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝,this变量允许相同的实例方法为不同的对象工作,每当调用一个实例方法时this变量将被设置成引用该实例方法的特定的类对象,方法的代码接着会与this所代表的对象的特定数据建立关联。

关键字static

1.静态方法和静态变量是属于某一个类,而不属于类的对象

2.静态方法和静态变量的引用直接通过类名引用

3.在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之则可以

4.可以用类的对象obj方法调用静态的方法。

语法

数据类型

byte字节类型可以存放负数是有符号整数127-128

short两个字节的整数-32768到32767

int是个字节整数有符号的整数

long八个字节的整数有符号的整数

char两个字节无符号0-65535字符串类型Unicode –ASCII

float浮点数

double双精度浮点数

boolean布尔值

例:这是一个二维数组

Int[][] num;

Num=new int[2][4];

Num[0][1]=12;

Num[2][3]=34;

数组一维数组

Int[]num;

Num=new int[3];

Num[0]=1;

Num[1]=12;

Num[2]=32;

输出语句

System.out.println(“内容”);

这个首字母必须大写要输出的内容或是变量

数组int[][]num={{1,2,3},{4,5},{6}};在java中用打括号套打括号。

递增在java中i++和++i是不同的这里的不同却绝于编译器

语句if(){}

While(true){}

Do(){}whild(true)

For(int i=0;i<10;i++){}

在计算机中数据的表示方法

在计算机中一个字节为8位就是二进制00000000

Java中的位运算

&按位与只有11为1

|按位或只有00为0

^按位异或只有01或10为1

~按位取反

<<移位运算符左移

>>移位运算符右移

>>无符号移位运算符右移

补码利用溢出我们可以将减法变成加法

一个字节表示一个整数,一个字节有八位,超过就溢出。

面向对象编程oop

Class point{ //point 类

Int x,y; //声明两个变量

Point(){ //构造函数

}

}

Point tt; //调用类型名指定新的声明类型实例名

Tt=new point(); //new关键字来实例化一个构造函数

tt.x; //调用一个point的一个属性

tt.y;

用final关键字来定一个常量,并初始化

常量的定义final关键字

例如

Final double PI=3.1415;

1.作为一种约定,在常量定义时通常采用大写形式。

2.Final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。

3.为了节省内存我们通常将常量声明为静态(static)

类的继承

1.在java中,通过关键字extends继承一个已有的类,为继承的类称为父类(超类,基类)。新的类称为子类(派生类)

2.在java中是单继承,不允许多继承。

方法的覆盖(override)

1.在子类中定义一个与父类同名,返回类型,参数类型均相同的一个方法,称为方法的覆盖

2.覆盖发生在子类与父类之间。

3.在java中覆盖不需要关键字

特殊变量super

1.特殊变量super,提供了对父类的访问。

2.可以使用super访问父类被子类隐藏的变量或覆盖的方法。

3.每个子类构造方法的第一条语句都是隐含的调用super()如果父类没有这种形式的构造函数,那么在编译时候就会报错。

多态性

通过覆盖父类的方法来实现,在运行时根据传递的对象引用来调用相应的方法Instanceof指令用于判断类型返回值为true后false

If(int instanceof boolean){

System.out.println(“int 是boolean类型”);

}else{

System.out.println(“int不是boolean类型”);

}

包(package)用.来导航包的目录

为了管理大型软件系统中数目众多的类,解决命名冲突的问题,java引入了包.

在java中包必须是在类的第一行最开始处,后面不需要大括号这个与as不同

例如

Package baoming;

包关键字包名也就是目录的名字

Cmd中

Javac -d 用于生成目录,可以生成在其他路径

例如cmd

D:\javac –d d:\Test.java

盘符编译指令指定目录参数指定目录编译的类

注意:生成在其他目录时,需要更改class path路径指向他这个路径的设置要设置成包路径的上一层目录.

设置class path的方法

在cmd中

D:\set classpath=%classpath%;d:\cn\mybole;

盘符设置类路径环境变量引用先前的类环境变量指定生成的类路径的上一层目录

编译生成包

1.在当前目录下生成包

Javac -d Test.java

2.指定目录下生成包

Javac -d E:\javaLesson Test.java

Import语句倒入包

1.引入包中的类import java.io.File;

2.引入整个包import java.io.*;

3.在用一包中的类可以相互引用,无需import语句.

类的说明符

1.public 公开访问也就是包外可以访问

2.default(不加访问说明符)缺省时

类的其他修饰符

1.final 禁止被继承,禁止修改

2.abstract 抽象类

方法说明符

1.public 公开访问

2.protected子类访问父类

3.default(不加访问说明符时)包内访问

4.private 类内可以访问

方法的其他修饰符

1.static 静态

2.final 禁止覆盖

3.abstract 抽象方法一般用于基类中用于定义不确定的方法在子类中去实现它

4.native

5.synchronized 同步

final 方法

1.为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(override)可以用final

方法

2.为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化要注意的是编

译器会自行对final方法进行判断并决定是否进行优化.通常在方法的体积很小,而我们确实不希望它被覆盖时,才将他声明为final

3.Class中所有的private和static方法自然就是final

抽象方法和抽象类

1.再类中没有方法体的方法,就是抽象方法,也就是说定义方法时不加左右大括号.

2.含有抽象方法的类,即为抽象类,在类的前面加上抽象类修饰符abstract

3.如果子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类.

4.我们可以将一个没有任何抽象方法的类声明为abstract ,避免由这个类产生任何的对象.

Native方法

1.Native方法是用户在java中可以使用,但不能编写的方法

2.JNI(java Native Interface)。它允许java虚拟机(JVM)内部运行的java代码能够与其他编程语言(如c,C++,汇编语言)编写的应用程序和库进行互操作。

3.Jni最大的好处是它没有对底层java虚拟机实现施加任何限制,因此java虚拟机厂商可以上不影响虚拟机其他部分的情况下添加对Jni的支持,程序员只需编写一种版本的本地(native)和本地应用程序之间的中介。

4.JNI可以理解为java和本地应用程序之间的中介。

Native方法说明符在java中可以使用但不能编写地说明符,他的作用是与其他语言进行互操

作用。

垃圾回收在内存不够时才会回收,他是自动运行的。

在java。Lang包中的finalize()方法当一个对象没有任何引用的时候会调用这个方法。在java。Lang包中的System类中的gc()方法,是手动运行垃圾收集器。

接口接口中所有的方法都是抽象的

定义接口关键字interface

例如:文件名为Ijk

Interrface Ijk{

//定义接口关键字自定义的名字与文件同名

Void mm();

//抽象方法

}

实现接口关键字implements

例如:

Class sxj implements Ijk{

Public void mm(){

System.out.println(“大”);

}

}

实现接口方法的权限一定要比定义接口的权限要高或是相同。也就是说定义接口时没有定义权限他的默认权限是public abstract,在实现接口类中方法前要加上public权限。

Oop 编程

接口

1.接口中所有的方法都是public abstract,不能使用其它的修饰符。

2.和public类一样,public接口也必须定义在与接口同名的文件中。

3.接口中可以有数据成员,这些成员默认都是public static final 静态常量。接口中定义的数据成员有三种方法可以访问1。接口名.数据成员。

2.实现接口名.数据成员

3。实例名.数据成员

4。一个接口可以继承另一个接口,允许接口的多继承。

内部类

1.在一个类中定义另一个类,这个类就叫做内部类或是内置类(inner class)

2.内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性。

3.但我们建立一个内部类时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象,可以随意地访问外部类中所有的成员。

这里的外部类包含内部类——在内部类中可以调用外部类成员变量

外部类.this 外部类成员

——在内部类中调用自身成员可以用

This.内部成员

在其他类中实例化内部类的方法

1.先在外部类中定义一个方法返回内部类

2.在其他类中实例化一个外部类

3.在其他类中用外部类.内部类名字实例名=实例外部类名字.返回内部类方法Class 外{

Class 内{

内返回(){

}

}

}

CLASS 其他{

Public static void main(String[] args){

外w=new 外();

外.内实例名=w.返回();//这时实例名指向的就是内部类

}

}

内部类

1.内部类可以在函数中内部类中定义,语句块中,如if的语句块中定义。可以无限嵌套,无论嵌套多深都可以访问外部类成员,要访问的外部类成员需要定义final修饰符。2.内部类的访问权限可以为private缺省protected final abstract

3.内部类为静态类,可以声明静态属性,静态方法,不能有非静态成员

4.内部类未不是静态类不可以有静态成员

内部类

1.在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明为final

2.内部类可以声明为private或protected;还可以声明为abstract或final

3.内部类可可声明为static的,但此时就不能再使用外部类的非static的成员变量和非静态的成员方法。

4.费static 的内部类中的成员不能声明为static的。只有在顶层类或static的内部类中才声明static成员。

内部类

我们为什么要使用内部类

1.在内部类(inner class)中,可以随意的访问外部类的成员。这可以让我们更好的管理我们的代码,增加代码的可读性。

2.内部类可以用于创建适配器类,适配器类适用于实现接口的类。使用内部类来实现接口可以更好的定位与接口关联方法在代码中的位置。

3.内部类的更多用法

在c++中可以多继承在java中可以用接口加内部类来解决

在java中可以使用抽象类加匿名内部类

异常处理

1.打开一个不存在的文件,网络连接中断,数组下标越界,正在加载的类文件丢失等都会引发异常。

2.Java中的异常类定义了程序中遇到的轻微的错误条件。

3.Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出,类文件格式错误等这一类错误由java运行系统处理。不需要我们去处理。

异常处理

异常处理的层次结构

1.java在执行过程中如出现异常,会自动生成一个异常对象,该异常对象将被提交给java

运行时系统。这个过程称为抛出(throw)异常

2.但java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象

交给其处理,这一过程称为捕获异常(catch)异常。

3.如果java运行时找不到可以捕获异常的方法,这运行时系统将终止,相应的java程序将

退出。

4.Try catch finally语句

Throws 语句例如

Public int tt(int a,int b)throws Exception

公开访问权限数据类型方法名(参数类型参数名)抛出异常异常数类型

Throws 这个语句的抛出异常是向上抛出异常,也就是向调用它的函数抛出异常,可以逐级向上抛出异常,直到java运行时,也就是虚拟机为止。

异常处理

1.对于RuntimeException通常不需要我们去捕获这类异常由java运行系统自动抛出并自动处理

2.如果类中的方法抛出多个异常,则子类的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)

3.我们可以在方法声明时,声明一个不会抛出的异常,java编译器就会强迫方法的使用者对异常进行处理,这种方式通常应用于abstract base class和interface。

Java编程规范

1.Package的命名,package的名字全部小写字母组成

2.Class和interface的命名,由大写字母开头,后面的单词用大写字母开头3.Class变量的命名用一个小写字母开头,后面的单词用大写字母开头

4.Class方法的命名用一个小写字母开头,后面的单词用大写字母开头

5.Static final 变量的命名所有字母都大写,并且能表示完整的含义

6.参数的命名和变量的命名一致

主要内容

1.Java的常用包

2.“==”与俄quals的用法

3.基本数据类型与引用类型

4.String和String Buffer

5.对象的克隆(clone)

6.数组的相关操作

7.封装类

8.Runtime类与Processlei

9.Class类

10.设计模式

Java常用包

1.Java.applet 包含一些用于创建java小应用程序的类,使用在浏览器中的小应用程序的类

2.Java.awt 包含一些用于编写与平台无关的图形界面(GUI)应用程序类3.Java.io 包含一些用于输入输出(I\O)处理的类

4.Java.long包含一些java语言的基本类与核心类如:String、Math、Integet、System 和Runtime提供常用功能,这个包中的所有类是被隐式导入的。

隐式导入是指不使用import关键字导入包

https://www.doczj.com/doc/d67119239.html, 包含用于建立网络连接的类,与java.io同时使用完成与网络有关的读写

6.java.util 包含一些实用工具类和数据结构类

1.基本数据类型Boolean byte short int long char float double

2.引用类型除以上都是引用类型

3.==是比较两个变量的值是否相等,俄quals静态方法是比较两个对象变量所代表的对象的内容是否相等。

String和Stringbuffer

1.针对String的+和+=,是java中唯一被重载的操作符,在java中,不允许程序员重载操

作符。

2.String对象可以和基本数据类型和引用类型进行+和+=操作

3.String类对象是一个常量对象

4.在处理大量字符串的程序中,我们通常用String Buffer来替代String

函数的调用

1.在java中传参数时,都是以传值的方式进行。

2.对于基本数据类型,传递的是数据的拷贝,对于引用类型,传递的是引用的拷贝。

数组合对象都是引用类型。

对象的克隆

1.为了获取对象的一份拷贝,我们可以利用Object类的clone()方法

2.再派生类中覆盖基类的clone()方法,并声明为public

3.在派生类的clone()方法中,调用super.clone()

4.在派生类中实现clonealbe接口

5.为什么我们在派生类中覆盖Object的clone()方法时,一定要调用Super.clone呢?

在运行时,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对新的存储空间中。

数组的操作

1.在java中,所有的数组都有一个缺省的属性length,用于捕获数组中元素的个数2.数组的复制System.arraycopy()

3.数组的排序Arrays.sort()。这是个静态方法

4.在已排序的数组中查找某个元素:静态方法Arrays.binarySearch()。

封装类

针对八种基本数据类型定义的相应的应用类型——封装类,也可以叫包装类,包裹类。

八种基本数据类型的封装类就是把第一个字母变成大写,其中int变为Integer

Char变为Character 其他的只有前面小写字母变成大写字母。

Class类

1.在java中,每个class都有一个相应的class对象,也就是说当我们编写一个类,编译完成后,在生成的.class文件中,就会生成一个class对象,用于表示这个类型信息。2.获取class实例的三种方式。

1.利用对象调用getclass()方法获取该对象的class实例

2.使用class 类的静态方法forName()用类的名字获取一个class实例

3.用.class的方式来获取class实例,对于基本类型的封装类,还可以采用,TYPE 来获取相对应的基本数据类型的class实例

3.在运行期间,如果我们要产生某个类的对象,java虚拟机(JVM)会检查该类型的class对

象是否已被加载。如果没有被加载JVM会根据类的名称找到.class文件并加载到内存。

就可以用它来产生该类型的所有对象。

4.NewInstance() 调用类中缺省的构造方法

相关主题
文本预览
相关文档 最新文档