欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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来适应各个操作系统。 
 
java语言特点:面向对象、跨平台、安全  (面向网络的编程语言、不支持指针)
 
    1.java application
    2.java applet  可嵌入web文件中的小型程序,不需要main().
 
简述java虚拟机的运行机制:jvm是可以运行java字节码的虚拟计算机系统,由jvm适应不同的操作系统,将字节码解释成本地计算机的机器码,是跨平台的保证。
二、
编译源文件(编译器) javac  xx.java ->执行字节码文件(解释器) java xx
java application 由1~n个类组成,必须有public static void main(string args[])(程序运行的开始);编译后得到n个.class文件。
  单行注释 //、
  多行注释
  /*
  */
文档注释:可被java文档化工具程序(javadoc)识别和处理,生成html格式的代码报告。
  /**
  */“
二、java语言基础
标识符  由字母、数字、_、$组成,不能以数字开头,区分大小写,
 
关键字...
 
声明常量 final int c=3;  (”final变量")
 
final,finally,finalize的区别:
  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.注解
 
基本数据 类型转换: 自动~,强制~(丢失精度,高位溢出)
运算符:(优先级...)(高位看齐)
    除(/):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}}
 
三、面向对象
     ooa 面向对象分析  ood ~设计   oop ~编程
特征:
    封装  1.把对象的属性和行为封装成一个整体 2.信息隐蔽,整体内的变量和方法规定了不同级别的访问权限
    继承  java支持单继承,接口实现多继承   extends implements
    多态  不同对象针对同一操作表现出的不同行为。 两种形式
           1.方法重载(overload):一个类中,允许多个方法使用一个名称(参数类表(类型,个数,顺序)不同)。
           2.成员覆盖(override):子类对父类方法重写,只能比父类抛出的异常少,访问权限不能比父类小。(不能是private的,否则只是在子类中定义了一个方法)
 
java内存机制: 基本类型变量和对象引用(即对象的名称)在栈内存中分配,堆内存存放由new创建的对象。
 
      1.创建对象:
             2.声明一个类的变量(引用变量)并为它分配栈区内存。new创建对象,分配堆区内存,并把该对象的引用(首地址)赋给声明好的引用变量。成员变量        有默认初始值。   
         注:null可赋值给引用变量(解决空指针异常,释放内存),不可赋值给基本类型变量。
 
对象的回收:垃圾收集器作为系统的一个线程运行,当内存不够或程序调用system.gc()要求垃圾收集时,与系统同步运行;系统空闲时~异步工作。
                     类中都提供了一个撤销内存的方法finalize(),不提倡使用,希望释放内存时只须将空引用赋给它即可。
this关键字:1.调用当前对象的其他方法和实例变量;2.区分同名参数;3.构造方法内调用另一构造方法。  (不能出现在类方法中)
 
参数传递: 1.按值传递:( 基本数据类型),将参数数值传给方法,被调用方法创建新内存来存储该数值。
           2.引用传递 : (数组、对象、接口),将参数的引用传递给方法,被调用的方法通过传递的引用值指向原参数的内存空间。
包:分隔符. 导入包:import  常用包:java.lang,  java.applet,  java.net,  java,util.
访问权限:
     1.private:同类
     2.默认成员:同类,同包
     3.protected:同类,同包,不同包子类
     4.public:全部
 
static:1.实例成员&静态成员。类使用new创建的对象,其拥有的类中定义的成员。& static修饰的成员,属于类而不属于对象,又称类成员。
            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.向下转换   父类强制转换为子类(信息缺失,不安全)
 
 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.内部类直接访问外部类的所有方法、属性。 也可通过: 外部类名.this.name 访问。    
         外部类访问内部类,需要实例化内部类。
      2.在其他类中调用内部类: outerclass.innerclass inner=out.new innerclass();
      3.在其他类中创建静态内部类:用【外部类名.内部类名】直接生成,不用实例化外部类) outerclass.innerstaticclass a=new outerclass.innerstaticclass ()
  
   成员内部类,不可以定义静态变量,能访问外部类所有成员。
   局部内部类,不可以定义静态变量,定义在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/...)
自动装箱、拆箱(jdk5.0)