float类型是一定有误差的,float保存方式离散的。float可以精确到小数点后7位;double精确到小数段后15位。Java里浮点数默认保存类型是double
,整型默认是int。
容量小的数据类型自动转换为容量大的数据型;数据类型按容量大小排序为:
byte,short,char->int->long->float->double
整型常量默认类型是int,所以88888888888要写成88888888888L然后付给long型变量不然直接long 1=88888888888会报错(应该是long
1=88888888888L)
类的成员变量所有的都可以初始化,如果不初始化,系统的默认初始化所有的基础类型,引用类型的成员默认都是null
Java里除了基本类型之外的变量类型都是引用类型
构造方法与类同名,无返回值;不写系统提供默认构造方法:类名(){}
栈的内存方法执行完就没了,堆里的内存是垃圾回收器回收的
方法的重载(overload):参数列表不同,相同名字和返回值的方法。也没有什么关键字。
类对象里都包含一个父类对象:this可以看做是一个变量,它的值可以看做是当前对象的引用;super看作是对象的父类部分的引用。
静态成员变量不放在stack,也不在heap,而是在data seg,内存里只一份,哪怕不new对象,也保存独一份。
静态方法不是针对某个对象调用,所以不能访问对象成员。
字符串常量也保存在data seg里面。
为了解决命名冲突的问题,Java引入包(package)机制,提供类的多重类命名空间。报名一般把公司域名倒过来命名:com.vip.pack1。Java编译器一般
把package跟文件目录映射,所以类的包如果是com.vip,那么这个类对应的class文件应该在./com/vip下. 必须class 文件的最上层包的父目录在环境
变量classpath内。当其他类引用这个类时,要么在当前目录下找,要么在classpath里的路径中找。
必须保证类的class文件位于正确目录下(也就是目录和包的层次完全一致。源文件在哪无所谓,因为执行java不需要源文件)。访问位于同一个包中的类
不需要引入(import)
如何打jar包: 直接在命令行里输入jar可显示jar参数详细。先建目录结构(对应package),然后把class文件放到对应的目录下(也就是pachage里),然
后在根package的父目录下用命令jar -cvf a.jar *.*打好了一个a.jar包,然后再引用package里面的类。tar相当于package的压缩打包,package相当
于目录结构。
可以把整个jar包当做一个路径放在classpath变量中,就可以直接使用里面的类文件。然后jar包里的类的路径就是你要引用的类所在的package!
J2SDK中主要的包: java.lang(rt.jar文件中,jar文件就是一个压缩文件包,可以用winrar打开。位于./Java/jdk1.8.0_05/jre/lib)包含一些java
语言的核心类,如String Integer System Thread,只有这个包的所有类可以程序里直接用,不用import java.lang.
访问控制:public default protected private修饰类的成员;类只能有public default(只有同一个包能访问)两种权限。
重写方法不能使用比被重写方法更严格的访问权限。重写没有关键字(override overwrite都不用)。
继承中的构造方法:子类的构造的过程中必须调用其他基类的构造方法,如果调用super,必须写在子类构造方法的第一行。系统默认调用基类无参的构
造方法。如果子类构造方法中既没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
Object:Java里所有类的父类。
toString:Object里的方法,描述当前对象的有关信息,在进行String与其他类型数据的连接操作时("info"+person)或者被打印出来时,将自动调用该
对象类的toString()方法。一般推荐重写这个方法。默认方法返回类名+对象的hashcode。
equals方法:根据Object里的默认实现:比较当前对象引用和当前引用是否是同一对象(就是a==b)。
hashcode in Java:每一个对象都有一个独一无二的编码,根据一个hashcode可以确定一个对象并可以很快速的定位这对象在内存中的位置。
动态绑定(就是多态):对于重写父类的方法,是把父类里指向该方法的指针改成指向新的类实现该方法的代码段。而动态绑定,对于方法的调用,只要方
法重写了,实际当中调哪个,就看实际引向哪个类的实现的该方法。
多态的三个条件:要有继承;要有重写;父类引用指向子类对象。满足这三个条件,当调父类该方法时,就动态绑定调用重写了的子类里的方法。
抽象类:含有抽象方法的类必须声明为抽象类,抽象类必须被继承,抽象方法必须被重写。抽象类不能实例化。抽象方法只需声明不需实现。
final的成员变量和局部变量,在初始化以后不能再改值了,一个变量加final关键字,就是说你不能改它的值。final的方法不能被重写;final类不能
被继承。(final的东西只能读不能写)
接口是抽象方法和常量值定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。定义
举例,变量声明为static是说不属于任何接口的对象,final是说这个变量不能改:
public interface Runner{
public static final int id = 1;
public void start();
public void stop();
}
一个类可以实现多个接口;接口中声明的变量能且只能声明为 public static final的;一个接口里的方法能且只能是抽象方法而且只能是public的;
接口可以继承接口。public static final可以不写,默认会加上。
继承类的关键字extends;实现方法的关键字是implements。
,整型默认是int。
容量小的数据类型自动转换为容量大的数据型;数据类型按容量大小排序为:
byte,short,char->int->long->float->double
整型常量默认类型是int,所以88888888888要写成88888888888L然后付给long型变量不然直接long 1=88888888888会报错(应该是long
1=88888888888L)
类的成员变量所有的都可以初始化,如果不初始化,系统的默认初始化所有的基础类型,引用类型的成员默认都是null
Java里除了基本类型之外的变量类型都是引用类型
构造方法与类同名,无返回值;不写系统提供默认构造方法:类名(){}
栈的内存方法执行完就没了,堆里的内存是垃圾回收器回收的
方法的重载(overload):参数列表不同,相同名字和返回值的方法。也没有什么关键字。
类对象里都包含一个父类对象:this可以看做是一个变量,它的值可以看做是当前对象的引用;super看作是对象的父类部分的引用。
静态成员变量不放在stack,也不在heap,而是在data seg,内存里只一份,哪怕不new对象,也保存独一份。
静态方法不是针对某个对象调用,所以不能访问对象成员。
字符串常量也保存在data seg里面。
为了解决命名冲突的问题,Java引入包(package)机制,提供类的多重类命名空间。报名一般把公司域名倒过来命名:com.vip.pack1。Java编译器一般
把package跟文件目录映射,所以类的包如果是com.vip,那么这个类对应的class文件应该在./com/vip下. 必须class 文件的最上层包的父目录在环境
变量classpath内。当其他类引用这个类时,要么在当前目录下找,要么在classpath里的路径中找。
必须保证类的class文件位于正确目录下(也就是目录和包的层次完全一致。源文件在哪无所谓,因为执行java不需要源文件)。访问位于同一个包中的类
不需要引入(import)
如何打jar包: 直接在命令行里输入jar可显示jar参数详细。先建目录结构(对应package),然后把class文件放到对应的目录下(也就是pachage里),然
后在根package的父目录下用命令jar -cvf a.jar *.*打好了一个a.jar包,然后再引用package里面的类。tar相当于package的压缩打包,package相当
于目录结构。
可以把整个jar包当做一个路径放在classpath变量中,就可以直接使用里面的类文件。然后jar包里的类的路径就是你要引用的类所在的package!
J2SDK中主要的包: java.lang(rt.jar文件中,jar文件就是一个压缩文件包,可以用winrar打开。位于./Java/jdk1.8.0_05/jre/lib)包含一些java
语言的核心类,如String Integer System Thread,只有这个包的所有类可以程序里直接用,不用import java.lang.
访问控制:public default protected private修饰类的成员;类只能有public default(只有同一个包能访问)两种权限。
重写方法不能使用比被重写方法更严格的访问权限。重写没有关键字(override overwrite都不用)。
继承中的构造方法:子类的构造的过程中必须调用其他基类的构造方法,如果调用super,必须写在子类构造方法的第一行。系统默认调用基类无参的构
造方法。如果子类构造方法中既没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
Object:Java里所有类的父类。
toString:Object里的方法,描述当前对象的有关信息,在进行String与其他类型数据的连接操作时("info"+person)或者被打印出来时,将自动调用该
对象类的toString()方法。一般推荐重写这个方法。默认方法返回类名+对象的hashcode。
equals方法:根据Object里的默认实现:比较当前对象引用和当前引用是否是同一对象(就是a==b)。
hashcode in Java:每一个对象都有一个独一无二的编码,根据一个hashcode可以确定一个对象并可以很快速的定位这对象在内存中的位置。
动态绑定(就是多态):对于重写父类的方法,是把父类里指向该方法的指针改成指向新的类实现该方法的代码段。而动态绑定,对于方法的调用,只要方
法重写了,实际当中调哪个,就看实际引向哪个类的实现的该方法。
多态的三个条件:要有继承;要有重写;父类引用指向子类对象。满足这三个条件,当调父类该方法时,就动态绑定调用重写了的子类里的方法。
抽象类:含有抽象方法的类必须声明为抽象类,抽象类必须被继承,抽象方法必须被重写。抽象类不能实例化。抽象方法只需声明不需实现。
final的成员变量和局部变量,在初始化以后不能再改值了,一个变量加final关键字,就是说你不能改它的值。final的方法不能被重写;final类不能
被继承。(final的东西只能读不能写)
接口是抽象方法和常量值定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。定义
举例,变量声明为static是说不属于任何接口的对象,final是说这个变量不能改:
public interface Runner{
public static final int id = 1;
public void start();
public void stop();
}
一个类可以实现多个接口;接口中声明的变量能且只能声明为 public static final的;一个接口里的方法能且只能是抽象方法而且只能是public的;
接口可以继承接口。public static final可以不写,默认会加上。
继承类的关键字extends;实现方法的关键字是implements。