java 基础,基础...(一)
程序员文章站
2023-08-13 10:52:45
一、Java平台体系结构: J2SE 标准版, 各应用平台基础,主要包括Java语言核心的类 J2EE 企业版, 包括J2SE所有的类包,还提供用于开发企业级应用的类(EJ,Servlet,JSP,XML和事务控制) J2ME 微型版 提供对消费电子设备的解决方案,包括J2SE的一部分类。 JRE、 ......
一、
java平台体系结构: j2se 标准版, 各应用平台基础,主要包括java语言核心的类
j2ee 企业版, 包括j2se所有的类包,还提供用于开发企业级应用的类(ej,servlet,jsp,xml和事务控制)
j2me 微型版 提供对消费电子设备的解决方案,包括j2se的一部分类。
jre、jdk、jvm的区别:
jre,即运行环境,用来运行开发好的java代码。提供java虚拟机和运行java应用程序所必须的类库;
jdk,java se开发工具集,用来编写代码。 包括了jre,和命令行开发工具。
jvm,java虚拟机,不是跨平台的。
源文件.java ->字节码文件.class ,java字节码文件(.class)在jvm上运行,jvm来适应各个操作系统。
jre,即运行环境,用来运行开发好的java代码。提供java虚拟机和运行java应用程序所必须的类库;
jdk,java se开发工具集,用来编写代码。 包括了jre,和命令行开发工具。
jvm,java虚拟机,不是跨平台的。
源文件.java ->字节码文件.class ,java字节码文件(.class)在jvm上运行,jvm来适应各个操作系统。
java语言特点:面向对象、跨平台、安全 (面向网络的编程语言、不支持指针)
1.java application
2.java applet 可嵌入web文件中的小型程序,不需要main().
2.java applet 可嵌入web文件中的小型程序,不需要main().
简述java虚拟机的运行机制:jvm是可以运行java字节码的虚拟计算机系统,由jvm适应不同的操作系统,将字节码解释成本地计算机的机器码,是跨平台的保证。
二、
编译源文件(编译器) javac xx.java ->执行字节码文件(解释器) java xx
编译源文件(编译器) javac xx.java ->执行字节码文件(解释器) java xx
java application 由1~n个类组成,必须有public static void main(string args[])(程序运行的开始);编译后得到n个.class文件。
单行注释 //、
多行注释
/*
*/
文档注释:可被java文档化工具程序(javadoc)识别和处理,生成html格式的代码报告。
/**
*/“
多行注释
/*
*/
文档注释:可被java文档化工具程序(javadoc)识别和处理,生成html格式的代码报告。
/**
*/“
二、java语言基础
标识符 由字母、数字、_、$组成,不能以数字开头,区分大小写,
标识符 由字母、数字、_、$组成,不能以数字开头,区分大小写,
关键字...
声明常量 final int c=3; (”final变量")
final,finally,finalize的区别:
final用于修饰属性,方法和类,属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句的一部分,表示总是执行。
finalize是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。
final用于修饰属性,方法和类,属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句的一部分,表示总是执行。
finalize是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。
基本数据类型:
1.整型 byte 1,short 2,int 4,long 8 (222l)
2.浮点型 float 4 (0.12f),double 8
3.布尔型:boolean 1
4.字符型:char [字符型字面常量 (a,b,c),字符型变量,字符集,转义字符]
引用数据类型:(引用类型变量 存储 该变量表示的数据的 地址)
1.数组
2.类
3.接口
4.枚举
5.注解
基本数据 类型转换: 自动~,强制~(丢失精度,高位溢出)
1.整型 byte 1,short 2,int 4,long 8 (222l)
2.浮点型 float 4 (0.12f),double 8
3.布尔型:boolean 1
4.字符型:char [字符型字面常量 (a,b,c),字符型变量,字符集,转义字符]
引用数据类型:(引用类型变量 存储 该变量表示的数据的 地址)
1.数组
2.类
3.接口
4.枚举
5.注解
基本数据 类型转换: 自动~,强制~(丢失精度,高位溢出)
运算符:(优先级...)(高位看齐)
除(/):x/0异常,x.0/0得到无穷或者nan.
取模(%):符号与被除数一致,适应于浮点数。
3<<2 =2 按位左移(高位舍去,低位补0)
3>>2 =0 按位右移 (低位舍去,高位补符号)
3>>>2 =0 无符号右移(低位舍去,高位补0)
new:内存分配,instanceof :判断对象是否为类的实例,[]索引,()方法调用,(type):强制转换
输入输出:
标准输入流(system.out) print(), println(), printf(%md,%c,%m.nf,%e,%s,%n)(jdk5.0新增)
标准输入流(system.in): java.util.scanner类-> scanner in=new scanner(system.in)
nextint(),
nextline(),字符串
nextdouble(),
next(),字符串,以空格为空格符
除(/):x/0异常,x.0/0得到无穷或者nan.
取模(%):符号与被除数一致,适应于浮点数。
3<<2 =2 按位左移(高位舍去,低位补0)
3>>2 =0 按位右移 (低位舍去,高位补符号)
3>>>2 =0 无符号右移(低位舍去,高位补0)
new:内存分配,instanceof :判断对象是否为类的实例,[]索引,()方法调用,(type):强制转换
输入输出:
标准输入流(system.out) print(), println(), printf(%md,%c,%m.nf,%e,%s,%n)(jdk5.0新增)
标准输入流(system.in): java.util.scanner类-> scanner in=new scanner(system.in)
nextint(),
nextline(),字符串
nextdouble(),
next(),字符串,以空格为空格符
流程控制语句:
if语句,嵌套
switch语句,case 常量(byte,short,int,char):break;没有break直接执行下一case的内容。
while语句,do...while语句
for循环(;;)
流程跳转:break;打破本层循环 ; break outer;结束标号所指的外循环。
continue:跳过本次循环; continue ouer;结束本层循环,跳到指定的外层循环中。
数组:
创建:type[] name=new type[n];type[] name={1,2,3,4}/new type[]{1,2,3,4}
长度 数组.length
多维数组:int[][] a/int a[][]=new int[2][];a[0]=new int[3];a[1]=new int[5];/int a[][]={{1,2,3},{1,2,3}}
if语句,嵌套
switch语句,case 常量(byte,short,int,char):break;没有break直接执行下一case的内容。
while语句,do...while语句
for循环(;;)
流程跳转:break;打破本层循环 ; break outer;结束标号所指的外循环。
continue:跳过本次循环; continue ouer;结束本层循环,跳到指定的外层循环中。
数组:
创建:type[] name=new type[n];type[] name={1,2,3,4}/new type[]{1,2,3,4}
长度 数组.length
多维数组:int[][] a/int a[][]=new int[2][];a[0]=new int[3];a[1]=new int[5];/int a[][]={{1,2,3},{1,2,3}}
三、面向对象
ooa 面向对象分析 ood ~设计 oop ~编程
特征:
封装 1.把对象的属性和行为封装成一个整体 2.信息隐蔽,整体内的变量和方法规定了不同级别的访问权限
继承 java支持单继承,接口实现多继承 extends implements
多态 不同对象针对同一操作表现出的不同行为。 两种形式
1.方法重载(overload):一个类中,允许多个方法使用一个名称(参数类表(类型,个数,顺序)不同)。
2.成员覆盖(override):子类对父类方法重写,只能比父类抛出的异常少,访问权限不能比父类小。(不能是private的,否则只是在子类中定义了一个方法)
ooa 面向对象分析 ood ~设计 oop ~编程
特征:
封装 1.把对象的属性和行为封装成一个整体 2.信息隐蔽,整体内的变量和方法规定了不同级别的访问权限
继承 java支持单继承,接口实现多继承 extends implements
多态 不同对象针对同一操作表现出的不同行为。 两种形式
1.方法重载(overload):一个类中,允许多个方法使用一个名称(参数类表(类型,个数,顺序)不同)。
2.成员覆盖(override):子类对父类方法重写,只能比父类抛出的异常少,访问权限不能比父类小。(不能是private的,否则只是在子类中定义了一个方法)
java内存机制: 基本类型变量和对象引用(即对象的名称)在栈内存中分配,堆内存存放由new创建的对象。
1.创建对象:
2.声明一个类的变量(引用变量)并为它分配栈区内存。new创建对象,分配堆区内存,并把该对象的引用(首地址)赋给声明好的引用变量。成员变量 有默认初始值。
注:null可赋值给引用变量(解决空指针异常,释放内存),不可赋值给基本类型变量。
注:null可赋值给引用变量(解决空指针异常,释放内存),不可赋值给基本类型变量。
对象的回收:垃圾收集器作为系统的一个线程运行,当内存不够或程序调用system.gc()要求垃圾收集时,与系统同步运行;系统空闲时~异步工作。
类中都提供了一个撤销内存的方法finalize(),不提倡使用,希望释放内存时只须将空引用赋给它即可。
this关键字:1.调用当前对象的其他方法和实例变量;2.区分同名参数;3.构造方法内调用另一构造方法。 (不能出现在类方法中)
类中都提供了一个撤销内存的方法finalize(),不提倡使用,希望释放内存时只须将空引用赋给它即可。
this关键字:1.调用当前对象的其他方法和实例变量;2.区分同名参数;3.构造方法内调用另一构造方法。 (不能出现在类方法中)
参数传递: 1.按值传递:( 基本数据类型),将参数数值传给方法,被调用方法创建新内存来存储该数值。
2.引用传递 : (数组、对象、接口),将参数的引用传递给方法,被调用的方法通过传递的引用值指向原参数的内存空间。
包:分隔符. 导入包:import 常用包:java.lang, java.applet, java.net, java,util.
包:分隔符. 导入包:import 常用包:java.lang, java.applet, java.net, java,util.
访问权限:
1.private:同类
2.默认成员:同类,同包
3.protected:同类,同包,不同包子类
4.public:全部
1.private:同类
2.默认成员:同类,同包
3.protected:同类,同包,不同包子类
4.public:全部
static:1.实例成员&静态成员。类使用new创建的对象,其拥有的类中定义的成员。& static修饰的成员,属于类而不属于对象,又称类成员。
2.实例方法&静态方法。
2.实例方法&静态方法。
注意:
1.静态变量在类被加载到内存时就分配了相应内存,被该类所有对象共享,可通过类名和对象名调用。
2.实例方法可操作静态变量和静态方法,静态方法只能访问静态变量和静态方法,不能操作实例变量和实例方法。
1.静态变量在类被加载到内存时就分配了相应内存,被该类所有对象共享,可通过类名和对象名调用。
2.实例方法可操作静态变量和静态方法,静态方法只能访问静态变量和静态方法,不能操作实例变量和实例方法。
继承 :默认继承java.lang.object类(*父类,所有类直接或间接继承)
原则: 1.子类继承父类所有变量和方法(构造方法除外)
2.子类不能删除父类成员,但可新增变量和重写方法。
注意:
1.父类构造方法不能继承,但子类构造方法一定会先调用父类的构造方法(new 子类时默认调用父类无参,也可用super()手动调用)。
2.子类用super访问父类的属性和方法(protected\public\默认)
3.子类可重写父类方法,但只能重写可继承的方法, 名字、参数表、返回类型相同,访问权限只能放大。(不能是private、static的)
出现编译错误:
1.super()只能放在子类构造方法第一行。
2.若父类未定义无参构造,则子类的构造第一行必须用super()。(最后父类定义无参构造)
3.多态:
1.静态多态 overload
2.动态多态 override
3.对象类型转换
1.向上转换:子类被当作父类使用,丢失子类新定义的信息。
1.子类新增的变量和方法无法使用
2.动态绑定(多态):覆写方法运行时,根据对象的类型判断执行哪个方法。(子类使用被覆写的方法,父类使用原方法)
3.静态绑定: 私有方法,final方法,static方法是静态绑定的,即根据对象引用的类型判断执行哪个方法。
2.向下转换 父类强制转换为子类(信息缺失,不安全)
原则: 1.子类继承父类所有变量和方法(构造方法除外)
2.子类不能删除父类成员,但可新增变量和重写方法。
注意:
1.父类构造方法不能继承,但子类构造方法一定会先调用父类的构造方法(new 子类时默认调用父类无参,也可用super()手动调用)。
2.子类用super访问父类的属性和方法(protected\public\默认)
3.子类可重写父类方法,但只能重写可继承的方法, 名字、参数表、返回类型相同,访问权限只能放大。(不能是private、static的)
出现编译错误:
1.super()只能放在子类构造方法第一行。
2.若父类未定义无参构造,则子类的构造第一行必须用super()。(最后父类定义无参构造)
3.多态:
1.静态多态 overload
2.动态多态 override
3.对象类型转换
1.向上转换:子类被当作父类使用,丢失子类新定义的信息。
1.子类新增的变量和方法无法使用
2.动态绑定(多态):覆写方法运行时,根据对象的类型判断执行哪个方法。(子类使用被覆写的方法,父类使用原方法)
3.静态绑定: 私有方法,final方法,static方法是静态绑定的,即根据对象引用的类型判断执行哪个方法。
2.向下转换 父类强制转换为子类(信息缺失,不安全)
final: ”不可改变的,最终的“
修饰类: 不能被继承,其中的方法隐性地指定为final。如java.lang.system,java.lang.string。 (但final类的成员变量不一定为常变量)
修饰方法:不能被子类重写。(private方法也不能被覆写)
修饰变量: 1.定义常变量 final int pi=3; 2.修饰成员变量 (声明时初始化或者 在静态初始化代码块中初始化)
抽象方法 abstract void f(int i);,没有方法体。不能被执行。
1.含抽象方法的类一定被声明为抽象类,抽象类不一定含抽象类。
2.抽象类不能创建对象,其引用可指向它子类的对象,子类覆写其所有抽象方法。(如没有全部覆写,子类也是抽象类)
3.静态方法、私有方法和final 方法不能被覆写,因此不能定义为抽象方法。 抽象方法 和 空方法的区别
修饰类: 不能被继承,其中的方法隐性地指定为final。如java.lang.system,java.lang.string。 (但final类的成员变量不一定为常变量)
修饰方法:不能被子类重写。(private方法也不能被覆写)
修饰变量: 1.定义常变量 final int pi=3; 2.修饰成员变量 (声明时初始化或者 在静态初始化代码块中初始化)
抽象方法 abstract void f(int i);,没有方法体。不能被执行。
1.含抽象方法的类一定被声明为抽象类,抽象类不一定含抽象类。
2.抽象类不能创建对象,其引用可指向它子类的对象,子类覆写其所有抽象方法。(如没有全部覆写,子类也是抽象类)
3.静态方法、私有方法和final 方法不能被覆写,因此不能定义为抽象方法。 抽象方法 和 空方法的区别
接口:interface
1.所有成员方法都是抽象方法,默认是抽象的、公有的。成员属性默认为静态的、final修饰的,需初始化。 (将接口视为 纯抽象类)
2.多继承 implements ,需要实现接口内所有 抽象方法(否则为抽象类),且可*使用接口中的常量。
3.继承中的对象类型转换、多态在这里仍适用。
接口的继承: 继承接口来派生新的接口 interface 子接口 extends 父接口1,父接口2,...{}
1.所有成员方法都是抽象方法,默认是抽象的、公有的。成员属性默认为静态的、final修饰的,需初始化。 (将接口视为 纯抽象类)
2.多继承 implements ,需要实现接口内所有 抽象方法(否则为抽象类),且可*使用接口中的常量。
3.继承中的对象类型转换、多态在这里仍适用。
接口的继承: 继承接口来派生新的接口 interface 子接口 extends 父接口1,父接口2,...{}
内部类:
1.内部类直接访问外部类的所有方法、属性。 也可通过: 外部类名.this.name 访问。
外部类访问内部类,需要实例化内部类。
2.在其他类中调用内部类: outerclass.innerclass inner=out.new innerclass();
3.在其他类中创建静态内部类:用【外部类名.内部类名】直接生成,不用实例化外部类) outerclass.innerstaticclass a=new outerclass.innerstaticclass ()
1.内部类直接访问外部类的所有方法、属性。 也可通过: 外部类名.this.name 访问。
外部类访问内部类,需要实例化内部类。
2.在其他类中调用内部类: outerclass.innerclass inner=out.new innerclass();
3.在其他类中创建静态内部类:用【外部类名.内部类名】直接生成,不用实例化外部类) outerclass.innerstaticclass a=new outerclass.innerstaticclass ()
成员内部类,不可以定义静态变量,能访问外部类所有成员。
局部内部类,不可以定义静态变量,定义在function中,可访问final变量。
静态内部类,可以定义静态变量和非静态变量,只能访问外部的静态成员
匿名内部类,不可以定义静态变量,不能有构造方法
局部内部类,不可以定义静态变量,定义在function中,可访问final变量。
静态内部类,可以定义静态变量和非静态变量,只能访问外部的静态成员
匿名内部类,不可以定义静态变量,不能有构造方法
object类: 所有类隐性继承objexct类。
目的: 1.可声明object类型的对象引用 指向任何类型的对象,如容器类。
2.定义一些方法,自动继承给所有类。
如: boolean equals(object oth) 【对象引用是否相等】 string tostring() 【将对象转换为字符串】 finalize() 【释放内存】
wait() 【线程等待】 notify() 【唤醒线程】
包装类: 8种基本数据类型都有相应的包装类 ,在java.lang中
1.int 转换为 integer 构造方法 new integer(23);
2.取得包装类的基本数据 typevalue() integer.intvalue();
3.包装类 转为字符串 tostring()
4.字符串 转为包装类 包装类的静态方法 valueof(string)
5.字符串 转为基本数据 包装类的静态方法 parsetype(string)
6.基本数据 转为字符串 string类的静态方法 valueof(int/...)
1.int 转换为 integer 构造方法 new integer(23);
2.取得包装类的基本数据 typevalue() integer.intvalue();
3.包装类 转为字符串 tostring()
4.字符串 转为包装类 包装类的静态方法 valueof(string)
5.字符串 转为基本数据 包装类的静态方法 parsetype(string)
6.基本数据 转为字符串 string类的静态方法 valueof(int/...)
自动装箱、拆箱(jdk5.0)