JAVASE基础知识整理(一)

来源:互联网 发布:node es6 编辑:程序博客网 时间:2024/05/17 15:36

关于java极简历史介绍:1995年有sun公司开发,2009年被oracle公司收购
java又可以分为三类se,ee,me,这三类概念我理解的也不深刻,就简单介绍一下:
javase:基础部分,可以做出类似QQ的软件
javaee:企业级应用 网站的开发
javame:嵌入式的开发,手机,做手机游戏

1.JDK的安装
下载 安装(可在oracle官网www.oracle.com下载)
配置环境变量
path:%JAVA_HOME%\bin
JAVA_HOME:D:\JAVA\jdk1.8.0(你的安装目录)
配置了环境变量以后,当你执行DOS命令的时候,系统就会在path指定的路径中寻找该命令对应的可执行文件

2.JVM JDK JRE IDE
JVM:java virtual machine java虚拟机
JDK:java development kit 开发工具包
JRE:java runtime environment 运行时环境
他们三者的关系是:
这里写图片描述
IDE:集成开发环境,是一类软件,比如eclipse,myeclipse,将程序开发环境和程序调试环境集合在一起

3.java程序运行过程
一个java程序要跑起来必须进过 编译和执行 这两个步骤
编译:是把java源文件编译成class文件 对应DOS命令为 :javac Hello.java(Hello是类名)
运行:运行class文件 对应的DOS命令是 :java Hello
需要注意的是,在执行DOS命令前,需要进入java文件所在目录

4.标识符
标识符是以字母(java采用unicode字符集,所以可以有汉字,日文,阿拉伯文等)、下划线、美元符开头
标识符由字母、数字、下划线,美元符,组成的字符串,标识符区分大小写,长度不受限制,不能为关键字
在程序中,标识符可用作变量名、方法名、接口名、类名等。

5.变量(variable)
变量定义 :声明+初始化,在java中变量的命名遵循骆驼式命名法,比如myAge
成员变量:(field 也叫实例变量)在类中定义,用来描述对象将有什么属性,从属于对象
如果我们没有手动初始化,系统会自动初始化,初始化规则:
数字:0, 0.0;布尔:false;char:\u0000;String:null;
静态变量:(也叫做类变量)就是声明为静态属性的变量,static关键字修饰,可直接用类名访问,从属于类
系统也会自动初始化,初始化规则同成员变量
局部变量:在语句块(就是一对{}包括起来的语句)或者方法中定义,临时保存数据,在使用前必须先声明和初始化
final修饰变量:即常量,只可初始化一次,一般用大写

6.数据类型
基本数据类型:
数字:
整数:这里写图片描述
浮点数:float(4个字节) double(8个字节)
字符:char(2个字节)
布尔:boolean(1位)
引用类型:(4个字节)实际引用堆里面的一个区域的地址
比如:数组,对象,接口(不可以new接口,但可以作为变量的类型)
类型转换:
byte,short,char可以自动转为int
long转为int就需要强制转型

7.表达式
类型的自动提升:
如果表达式中有long(double),结果就是long(double)
强制转型:

int a,c;long b;c=(int)(a*b)

8.运算符
算数运算符:+,-,*,/,%,++,–

int a=3;        int a=3;int b=a++;      int b=++a;b=3;a=4;        b=4;a=4;

关系运算符:〈,〉,==
赋值运算符:=
逻辑运算符:&&,||,!
位运算符:~(取反),&(按位与),|(或),^(异或),<<(左移),>>(右移)
右移一位相当于除2取商,左移一位相当于乘2
扩展运算符:比如a+=b就是 a=a+b
三目运算符:boolean?A!B,true返回A,false返回B

9.控制语句
分支语句: if语句,switch语句
其中switch语句中的case具有穿透性,这也就是为什么要加入break语句,不然它会一直执行下去,有时候为了是代码简洁, 可以将功能相同的case语句合并起来,在JDK7种switch()括号内的内容可以为字符串。
循环语句: for,while,do…while(使用较少,循环体至少执行一次)
跳转语句: break(强制终止整个循环),continue(跳过循环体中剩余语句执行下一次循环),return(方法体中常用来返回值或对象)
java中没有goto语句,但加标签的continue还是可以达到goto的效果,goto仍作为java的一个保留字,只是没有功能了

//带标签的continue语句(求1到100内的质数)outer:for(int i=1;i<=100;i++){    for(int j=2;j<i/2;j++){        if(i%j==0){            continue outer;        }    }    System.out.println(i+" ");}

10 数组
关于数据首先这么几点要了解,第一,数组是相同分数据类型的有序集合,这里的数据类型可以是任意类型,第二,数组也是对象,数组元素相当于对象的成员变量,第三,数组长度确定不可变

数组的声明:int[] score 数据类型 - 数组名
为数组分配空间:score=new int[5] 数组名-数据类型-数组长度
要初始化一个数组有以下几种方法:

//默认初始化int[] scores=new int[5];//静态初始化int[] scores={78,91,84,86,12};//二维数组初始化int[][] a=new int[3][];int[][] a={{1,2},{3,4,0,9,},{5,6,7}}; 

二维数组的内存分析图:(地址都是瞎编的)
这里写图片描述

数组的拷贝:System.arraycopy(s,0,sBack,0,s.length);
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束

11.Array类
Array类是java提供的一个工具类,位于java.util包下,封装了一些方法,用来直接操作数组,比如实现数组中的排序。
注意你如果要使用这个类,一定导入

//导入import.java.util.Arrays;//自动排序,升序Arrays.sort(scores);//数组转化为字符串Arrays.toString(数组名);//打印数组可以用foreach,for语句的加强版,jdk5.0以后新加的,这里的hobbys是String类型的数组for(String hobby:hobbys){    System.out.println(hobby);}

12.对象的进化史(行最后是老师自己起的名字,帮助理解,不权威)
基本数据类型阶段:数据少 ,又叫无数据管理时代
数组:数据变多,将同类型的数据放在一起,对数据进行弱管理
结构体:不仅仅可以放同类型的,也可以放不同类型的数据,强管理
对象/类:数据变多,类型变复杂,行为也变复杂了,超强管理

13.面向对象编程(OOP)
Object Oriented Programming
它的实质就是,以类的方式组织代码,以对象的方式封装数据

14.方法重载
Overload
第一,必须在同一个类中
第二,方法名一致
第三,方法参数不同,参数顺序和类型不同
第四,与方法修饰符或返回值无关

15.方法重写
方法的重写是建立在有继承,有子类和父类的基础上的
子类不满意父类的方法,可以进行重写,覆盖父类的方法,在调用的时候,会优先调用子类的方法
方法重写要点:方法名保持一致;子类权限修饰符可以大于等于父类的;子类返回值类型小于等于父类的类型;
子类声明异常不能超过父类的类型

16.对象和类
An object is an instance of a class
在java中万事万物皆对象,客观存在的事物皆为对象,对象是类的实例化
类是一个模子,它确定对象将有的属性(对象所具有的性质)和方法(对象执行的操作),它是用于描述同一类型对象的一个抽象概念,所有类都有一个Object父类
对象和类的关系:特殊到一般,具体到抽象

//代码示例public class Hello{    //属性    public String str;    //方法    public void getStr(){        System.out.println(str);    }    //构造方法,无返回类型,参数可不同,可重载,方法名必须和类名一致,通过new关键字调用    public Hello(){        //构造方法的第一句,无论你写不写,它是直接调用父类的构造器,在这里是Object父类        super();    }}//main函数中新建对象,Hello h=new Hello();h.str="Hello World!";h.getStr(); }

17.关键字-this
在普通方法中,指向调用本方法的对象;在构造方法中,指向正要初始化的对象;也可以用来调用其他的构造方法;
要注意的是,this不能用于static方法中

18.关键字-static
用static关键字修饰成员变量(方法)—-静态成员变量(方法),可直接用类名访问(从属于类)
在静态方法中可以调用静态成员,但不可直接调用非静态成员,可以调用静态方法,但是不可直接调用非静态方法。
静态初始块最先被执行,在类被加载时仅执行一次,语法如下:

static{    //最先执行的代码}

执行顺序:静态初始化,普通初始化,构造方法

java中static和private的用法
1.private 在定义成员变量或者方法时,只有在本类才可以调用,用static修饰的也可以用private修饰。
private static int m=1;
2.static修饰的成员变量也叫类变量或者全局变量,无论创建多少对象,static修饰变量仅仅占用一块内存
static优先于实例变量

19.关键字-final
修饰类:该类不允许被继承
修饰方法:方法不允许被子类重写,但是可以被重载
修饰属性:类的初始化属性必须有值,或者在构造方法中赋值
修饰变量:常量,只可以赋一次值

20.关键字-super
在对象内部使用,可代表父类对象
子类调用构造方法时,即使没有super();,系统也会默认调用父类的构造方法,且必须在子类构造的第一行。

21.使用访问控制符
其中yes表示可以访问
这里写图片描述

22.面向对象三大特征–封装
通过使用上述[21]中的访问控制符,来实现方法和属性的封装。
封装的追求的是,高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅仅暴露少量的方法给外部进行使用
隐藏对象的内部复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性,维护性
比如:在定义类中的属性时,都将其设置为private,然后添加相应的getset方法来修改得到这个属性

public class Hello{    private int year;    public int getYear(){        return year;    }    public void setYear(int year){        this.year=year;    }}

23.面向对象三大特征–继承
继承最大的优点就是提高了代码的复用性,子类可以拥有父类的所有方法和属性,其中private修饰的无效;
子类不满意父类的方法,也可以进行重写,当子类重写了父类的方法时,就会优先使用子类的方法。
Object类:是所有类的根基类,共同父类,常用方法有,toString,equals,hashcode等

继承内存分析:
这里写图片描述
这里写图片描述

java和c++不同的地方是,java是单继承,而c++是多继承。

24.面向对象三大特征–多态
第一,多态可以理解为,程序的最终状态只有在执行的过程中才被决定而非编译期间就决定了,这对于大型系统来说可以提高系统的灵活性和扩展性。
第二,在java中实现多态时,引用变量有两种类型
编译型类型:一个父类(由声明的类型决定)
运行时类型:由实际的对象类型决定,具体是哪个子类就是哪个子类
第三,多态存在的3个必要条件:继承,方法的重写,父类引用指向子类对象

CallBack(钩子函数,多态的应用):

//父类public class MyFrame{    public void paint(){        ...    }}//主函数public class PaintFrame{    public static void drawFrame(MyFrame f){        f.paint();    }    public static void main(String[] args){        drawFrame(new GameFrame());    }}//子类public class GameFrame extends MyFrame{    public void paint(){        ...    }}

25.Java中的字符串类
String类:不可变字符序列
“==”和“equals()”有什么区别
== :判断两个字符串在内存中首地址是否相同,即判断时候是同一个字符串对象
equals():比较存储在两个字符串中对象是否一致
StringBuilder :可变,效率高,线程不安全
StringBuffer:可变,效率地,线程安全
StringBuilder和StringBuffer都继承了AbstractStringBuilder

//append 追加内容到末尾,若空间不够大会自动扩容StringBuilder gh=new StringBuilder("a");for(int i=0;i<10;i++){    gh.append(i);}//insert 插入指定位置gh.insert(2,"s");//toString 转化为String对象gh.toString();//length长度int lengeh=gh.length();

26.时间处理相关类
可视化日历

java.util.Datejava.text.SimpleDateFormatjava.util.Calendar//用format()方法转变日期格式Date d=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String today=sdf.format(d);//用parse()将文本转换为日期String day="2013年2月12日 10:30:20";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d=sdf.parse(day);//getTime 返回一个long类型的数d.getTime();//Calendar转化为DateCalendar c=new GregorianGalendar();c.set(year,month,date,hourOfDay,minutes,second);//Calendar c=Calendar.getInatance();Date now=c.getTime();

27.抽象类
用abstract修饰的类即为抽象类,一个抽象类也可以继承另一个抽象类,通过抽象类可以避免子类设计的随意性,可以做到严格限制子类的设计,使子类之间更加通用,抽象方法的意义在于分离方法的设计和实现
抽象类的要点:
有抽象方法的类只能定义抽象类
抽象类不能实例化,不能用new来实例化
抽象类只能用来继承
抽象方法必须被子类重写

语法:

public abstract class Hello{    //抽象方法无方法体    public abstract void say();}

28.接口
接口是特殊的抽象类=全局变量+公共抽象方法
类可以实现接口,一个类可以实现多个接口,接口之间可以多继承

语法:

//定义接口[修饰符] abstract interface Haha [extends 父接口1,父接口2]{    public static final=常量;    public abstract 方法(方法中不可有实体);}//类实现接口public class Hah implements Haha{    public abstract 方法(){        ...    }}

29.内存机制
栈:存放局部变量,不可被多个线程共享,系统自动分配
堆:存放对象,可以被多个线程共享,存在资源竞争问题
方法区:类的信息,代码,静态变量,字符串常量等,可被多个线程共享

30.垃圾回收机制GC
Garbage Collection
第一,程序员不能调用垃圾回收器
第二,可以通过System.gc();通知GC运行,但java规范不会立即执行
第三,finalize方法,属于Object类,java提供给程序员用来释放对象或资源方法,一般不调用

java和c++垃圾回收的不同
java:GC自动回收
c++:程序员通过析构函数来删除对象

注意:上述的垃圾指没有使用的对象,也有解释为,没有引用的对象。

31.异常
java异常是java提供的用于处理程序中的错误的机制,采用面向对象的方式来处理异常
抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,把异常提交给JRE
捕获异常:JRE得到该异常后,寻找相应的代码来处理异常,JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止

//防止空指针异常Computer c=null;if(c!=null){    c.start();}//ClassCastExceptionif(obj instanceof Man){    Man m=(Man)obj;}
0 0
原创粉丝点击