java基础总结

来源:互联网 发布:翻墙的原理 知乎 编辑:程序博客网 时间:2024/05/17 07:49

java基础总结       


一、复习java语法:
1.Java的原文件必须是扩展名是(.java)
2.标示符和关键字
3.数据类型:四类八种byte 8bit short 16bit int 32bit long 64bit float 32bit double 64bit char 16bit
4.分支语句:if switch
5.循环结构:for while  do…while至少执行一次
6.数组:长度的方法、初始化付值两种一种直接给值;或生命长度
7.跌代的方法:主要是两种for循环 普通循环for(;;)增强for( :)循环
二、面向对象的编程思想
8.OOP(Object Oriented Program)面向对象的编程  POP(Procedure Oriented Program)面向过程的编程 AOP(Aspect Orioented Program)面象切面的编程
9.基本的几个构件:包、类、接口、枚举 Annotation(JDK1.5)
  a.包常识:用package在类内声明一下调用的时候在包外直接用包名.类名;且package必须是文件的第一句话;包名的命名规则多个包的时候用“.”分割
  运行的时候必须在上层目录中直接调用并用包名字.类名调用(或用-classpath也可以简写为-cp指定访问路径);用 -d的目的是自动生成文件夹用“.”
  可以让在当前路径生成文件夹(也可以直接指定目标路径);包的引入:import
  b.类:属性(特点)要有具体的值可以初始化也可以后来付值,方法(行为)
  c.面向对象的特点:封装,继承,多态
  d.C语言中include的文件是包文件全包含进来会导致文件膨胀,import的作用是把文件地址引入文件大小不受影响
  e.在编译的时候需要注意:如果类中引入了其它的包时不是完全路径的时候要用-classpath或-cp指定文件的基本路径位置可以加多个用“;”分割
  f.类中属性可以不初始化默认值是0,类中不能直接放语句,语句只能放在方法体内或定义为语句块
  g.构造器:在创建类对象的时候只调用依次;一定与类的名字完全相同;必须没有返回值  作用:主要用来初始化 自己不定义的时候会自动加上无参数的
  构造函数
  h.Eclipse(日蚀) 作者:Erich Gamma 和另外三个合起来叫gang of four四人帮简称GOF,他们合写了设计模式
  i.类的对象产生后属性的生成过程是先分配内存;然后从头执行语句付值看直接付值还是用块付值;后进入构造函数付值
   基本数据类型就可以先使用(在块中)在声明
  所以类的属性的初始化有三种机会;可以直接初始化;块初始化;构造函数初始化

二  面向对象的编成思想:
分类:OOP(Object Oriented Program)面向对象的编成 POP(Procedure Oriented Program)面向过程的编成AOP(Aspect Oriented Program)面向切面的编成
         1.包:用package在类内声明一下调用的时候在包外直接用包名.类名;且package必须是文件的第一句话;当有多层包时用“.”分割
         2.编译有包名的文件注意事项和命令:用 javac  -d  . (或指定文件路径)  *. java时就不需要手动建立包的层次结构;若不用 -d 制定自动生成需要手动建立包层次结构;
         3.在编译和运行的时候文件中所导入的文件和类不在一个根目录下的时候还要用 -classpath(或-cp)指定寻找路径,这个命令在编译的时候要在 - d 命令前 在执行的时候要先在本目录中找 可以写成如下 .;c:/;d:
         4.包中引入文件的命令是 import ;import规范在引入的时候要引入到具体的类(否则不利于代码维护);一定要按字母的顺序引;快捷键ctrl+shift+o 先引JDK的再引自定义 中间有断行分割
         5.类:有属性(即存数据的变量)和方法(执行属性操作的代码)
         6.类中的属性可以只声明不初始化系统会默认初始化为0,但是类中不能存在单独的语句,可以存在方法和语句块
         7.类的构造器:(构造函数)特点:名称与类名相同;无返回类型;在类的实例化时调用且只调用一次    自己不定义时系统会默认加上无参的构造函数
         8.其它:c语言中的include的文件是将包含文件全部导入导致文件膨胀,import的作用只是指示寻找文件的地址 
         9.Eclipse(日蚀)作者:Erich Gamma 他与另外三人合起来叫gang of four 四人帮简称(GOF)合写了设计模式
         10.类中属性的初始化有三次机会;可以直接初始化;块中初始化;构造函数中初始化
         11.类的静态成员在类加载的时候就加载而非静态成员在类实例化后加载然后执行赋值;声明赋值与块赋值按出现的先后顺序执行,就是在块中的变量可以先使用再声明;最后在进入构造函数赋值

    三继承和多态
1.继承:使用关键字(extends)java中的继承是单继承的,在c语言中是多继承  好处:代码复用;父类可以操作子类(即多态的基础)
2.java默认的继承一个统一的类Object,即默认的会给没有继承的类加上 extends java.lang.Object()
3.新建的类中还默认的增加import java.lang.*;且import的作用是指定一个寻找文件的地址相当于html标签中的<base url="">
4.import规范在引入的时候要引入到具体的类(否则不利于代码维护);一定要按字母的顺序引;快捷键ctrl+shift+o 先引JDK的再引自定义 中间有断行分割
5.属性也可以继承:方法的覆盖(overwrite)在父类中有的在子类中覆盖后定义父类的变量赋子类对象(多态)调用的覆盖方法时将使用子类的方法
6.多态:一个父类的不同子类时可以表现出不同的特征即个性   都可以通过用父类来创建
7.多态的体现是在父类操作自类的时候:属性是不可以多态的,但是方法可以多态(属性是个体不能继承如名字,行为是共性的可以继承但可以有差异)
8.总结:继承的时候是单继承属性和方法都可以继承,但是实现多态时(即定义父类的变量赋子类对象)调用的方法一定父类中要有,注意若子类中有相同的方法子类的方法
会覆盖父类的方法(即调用子类的方法),若是属性的时候属性的调用不会覆盖就是属性没有多态,而方法有多态

四、权限
1.方法和属性的访问权限种类四种:public private protected default
2.区别:private 只有自己类中可见  default(友元)  只有包内可见子类中不是同包内也不可见  protected  同个包内和子类(可以不是同个包的子类)内可见  public 任何地方可见
3.属性的getter方法和setter方法 this指向对象自己 在属性中定义变量方法参数中定义同名的参数调用的时候变量的使用是最小化原则所以要用this 来区分
4.构造方法定义成private的时候外面不能创建类的实例,但是在单立模式的时候使用这种方式
5.类的访问权限两种public任何时候可见  (default)缺省的包内可见
6.补充方法覆盖:覆盖的时候方法权限能扩大但是不能缩小,子类继承父类的异常的时候只能缩小不能放大
7.多态就是在父类控制子类的时候方法被子类覆盖,显现子类的特性
8.同一个源文件中可以有多个类但是只能有一个public同时还可以有内部类但是不能有内部的方法,即文件的名字只能跟public类的名字相同
且一个文件中有多个类的时候虽然只有一个public 但是在编译的时候会产生多个类文件(即一个类产生一个类文件)

五。总结

1.继承的语法:class A extends B
2.特点:单继承
3.继承的效果是可以将父类中的可见的方法和属性继承是实现代码复用的第一种方式
4.可以使用父类的变量指向子类的对象(即父类操作子类)
5.方法覆盖能实现多态,且访问权限只能放大不能缩小
6.统一的父类,java.lan.Object
7.关键字:this super
8.属性和方法的权限:private default protected public
9.类的权限:public default
10.内部类的访问权限是与方法的权限一样
11.默认的情况下所有的文件import java.lang.;
六 修饰符
1.修饰符的种类有:abstract  native synchronized static  final transient volatile(易变的)访问权限:private public protected (default)
2.返回类型只能修饰方法:如:void,int,String…;
3.具体修饰符的含义:
  a.static 可以修饰方法、块和属性  静态的
  方法:在Enclipse中的显示形式应该是斜体 属于类的方法,不仅仅属于某个对象
  属性:默认没有修饰符时候包内可见,加上static后,也可以用类直接调用
  使用的注意事项: 构造函数不能是静态的 静态的方法、属性和块在类的加载时调用只调用一次(加载的含义:就是内存读取class文件)
  在调用静态方法的时候也要先加载类,在类想产生第一个实例化对象时类也要加载 静态方法和块不能调用非静态成员因为归属的个体不同
  非静态块在创建对象的时候调用但是要先于构造方法的调用 静态的变量是全局的只被初始化一次日后每次改变都会保留 非静态的变量每创建一次就被初始化一次
//特殊说明      1.类的生存周期是在类加载器加载它和类加载器退出的时候一个java虚拟机可以有多个类加载器,一般启动的时候会自动调用一个(名字??)加载器
//特殊说明 2.JVM Java虚拟机就是程序运行的一个工具或平台 使得Java能够实现跨平台 也就是屏蔽操作系统的差异提供相同的开发环境
//特殊说明 3.main方法是静态的原因也是可以用类的名字可以直接调用就是加载器读了文件名用文件名再直接调用main方法
//特殊说明 4.JVM 的存在使java是安全的限制程序在虚拟机上执行,不会超出java虚拟机
  a补充:  1.静态方法不能使用this 的原因是没有产生对象,this是类的实例对象还没产生的时候静态的方法就已经加载了
   2.类的加载:一个是在new 产生对象的时候,或直接调用静态属性的时候,或用类的名字.class 或直接用Class.forName()
   3.做静态的原则:尽量少用,站用内存资源
   4.静态引用(JDK1.5特性):就是直接引入import 类.* 类中的所有静态成员都可以直接使用
   5.跟本问题非静态的一定要创建对象的实例后才能使用而非静态的可以直接使用就在直接加载类不产生对象就使用
   6.静态的方法不能被子类覆盖,可以被继承
  b."=="与"equals"方法的区别:
   1.程序运行机制: 运行栈 就是在先进后出,重要的两个机智压栈和弹栈 运行的时候先分配栈然后有{就压栈有}就
   弹栈 基本的数据类型就是直接存入值,而对象则存放的是在堆中的对象的首地址  使用类型的原因是明确分配内存的大小
   2.所以用等号比较的是首地址而不是真实的对象
   3.equals的实现与==的实现是一样的但是你自己要直接比较两个对象是不是相等就要重新覆盖父类的方法equals
    如:public class Person{String name;public boolean equals(Object obj){if(obj instanceof person)
   { Person p=(Person)obj; if(name.equals(p.name){return true;}}}return flase;}}
   4.基本的数据类型可以直接使用"=="但是String、对象类型的不可以要用equals比较
  c.abstract(抽象的) 将没有具体的行为的方法定义为抽象的与具体的方法的区别 :加上关键字abstract,并且没有方法体 属性不能定义成抽象的
  抽象的方法一定存在于抽象的类中 抽象的类不能实例化   抽象类中的非静态的方法是不能够直接调用的与模版设计模式相关
  d.final 修饰属性的时候是定义一个常量,只能在声明时初始化、块中初始化或在构造函数的时候中初始化 标识内存为只读  修饰方法的时候子类不能被覆盖
  不能与abstract同时使用 修饰一个类的时候不能被继承 用途:不希望一个属性发生改变,一个类被继承,一个方法被覆盖  就声明为final
小结:三个修饰符:static abstract final
八。接口和枚举
1.抽象类中可以没有抽象方法,抽象方法一定要存在抽象类中   抽象类最大的特点就是不能给实例化
2.接口(interface) 在类中的方法全是抽象的 且在接口中的方法默认的也是公共的  也就是接口中的方法都是 public abstract
3.优点:定义抽象方法的一种形式 抽象类描述的是一种继承关系 接口是描述的一种能力  接口可以实现多继承 抽象类只能单继承
4.接口可以多实现。抽象类只能单继承
四、常用的类
1.String 可以叫做特殊的基本数据类型用堆存储
2.细节问题:String s1="str";String s2="str" String s3=new String("str"); String s4=new String("str") 现在问题s1等于s2
s1的创建和s2创建的的时候是先在堆中创建一个缓冲池空间用这种方式付值的时候直接从缓冲池中提取相同的时候地址就相同,而s3和s4重新
自动产生对象不经过缓冲池
3.Person p1=new Person(); Person p2=p1; 就是让不同的对象之间指向同一个地址 与s1和s2付值相似
4.常用方法:charAt() length() Indexof()查找字符和子字符串出现的第一次位置subString()截取字符串包含起始位置不包含结束位置 codePointAt
lastIndexOf()
5.String 是一个常量在内存中是以数组的形式组织的