java基础使用

JDK与JRE的区别:

JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从JAVA官网选择安装JAVA即安装的是JRE。

JDK是为开发人员所提供的工具包,对开发人员来说属于必备项,一般在JDK本身包含JRE,但是一般JDK还会再安装一套JRE,这一套JRE被成为公共JRE(如图),JDK需要从oracle的官网下载。

当前的主流编辑器,如eclipse会找到JRE和JDK的位置,当然也可以再进行手工修改。

使用eclipse时,若无法打开基础类的源码,则需要在设置中将JRE指向JDK目录下的JRE而非计算机中原本的JRE地址,具体修改的方法:window-preferences-java-install JRE,然后add入具体的jre。

 

JAVA所需环境变量说明:

PATH:(必需)指定编译、运行java程序是所需要的程序所在路径,一般在jdk安装目录(注意是JDK!!!和JRE是不一样的!!!)下的bin文件夹中。目前常用的设置办法是先定义一个JAVA_HOME变量,在PATH中引用JAVA_HOME:%JAVA_HOME%/bin;

CLASSPATH:(之前必需,现在非必需)设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件),现在已经不需要;

JAVA_HOME:(理论上非必需,实际必需)设置一个变量存放java程序运行所需要的程序所在路径,方便在其他地方进行引用(不用再输入一长串路径,直接使用JAVA_HOME变量即可),同时,现在不少软件也会直接调用JAVA_HOME变量,不设置容易出错。

 

1.java主要结构阐述

java中每一个.java文件都是一个类,一个java工程由许许多多的.java文件组成,也就是由java类组成。一般而言一个java类中主要的结构如下:

1.包申明:java类在本工程中属于哪个包,即在工程中的位置;

2.导入的包:外部库,工具;

3.公共类体(或接口)定义:类名与java文件的名称必须相同,类中内容即java文件的主要内容

4.其他:其他类的定义和接口定义。

java项目中,由外至内分别为:source文件夹、包(package)、类(.java,就是上面bb了半天的那个东西),经过编译后会将编译后的类(.class)放在与source文件夹同级的bin文件夹中。不同的source floder 中的package可以同名,相同的package中的 类 不能同名(在两个不同source floder中的相同package中也不行)

source floder决定实际物理存储结构,工程中的逻辑结构由package决定

 

2.基本数据类型

基本数据类型8中:整型4种、浮点2种、字符、布尔;

btye最大128-1;short最大32768-1;int包含最大2开头的10位数;数值计算注意整型数值范围,记得加转换符;long数据在赋值时若整数的数值超出int的最大范围则要在整数后面加上l说明;

浮点型对于float的赋值要在小数后面加f说明;

单纯的字符型变量相加(即每个元素都是字符变量(PS.加入整形也是ascii码相加))等于把各个字符的ascii码相加;(与字符串的加法运算不同!!!字符和字符串相加得到的是字符串)

 

3.基础包装类

基础的常用的包装好的类有7种(一定注意大小写!!!):String、Integer、Boolean、Byte、Character、Double、Number;

 

4.类型转换:

char、int、double等之间可以用强制转换的方式转化,如(int)‘a’,(char)25;boolean类型变量无法由强制转换得到

各个变量与各个类之间的转换,需要通过调用各个对象的方法来实现。如:整形、字符型向String对象转换,可以使用String.valueOf();

 

5.常量赋值:

全局常量初始化时必须赋值;局部常量初始化时可以不赋值,但是只能赋值一次。

 

6.变量有效范围:

全局变量分为实例变量和静态变量(static),静态变量可以在其他类中使用 类名.变量名 的方式使用,实例变量只可在本类中使用。

局部变量只在定义变量的代码块中有效,即{}两个大括号之间,从变量申明开始算。

与局部变量同名的全局变量,在局部变量的使用范围内失效。

 

7.switch与if elseif的区别

两者可实现相同的功能,但从逻辑上说,if elseif必须对匹配项前面的每一个项都执行检查,而switch通过一定的查找办法去查找匹配项。在需要检查的项较多时,switch效率更高,switch另一个优势是代码清晰,但缺点是难以进行复杂操作。

 

8.使用foreach循环方式

使用foreach循环方式可以快速的遍历数组、对象等,具体方式:for(int x : arr){操作},但需要注意foreach形式无法对数据进行写入。for-each循环可以与任何实现了Iterable接口的对象一起工作,而Collection接口扩展了Iterable接口,故标准类库中的任何集合都可以使用for-each循环。(只读只读只读!!!)(常见的如list、set、queue)

 

9.String对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明)

length()获取字符串长度;

equals()判断字符串的内容是否相同,注意,不能直接使用等号比较,使用等号会比较内存中的位置!!!!!

replace()字符串中的子串替换;

split(),将字符串按给定的符号进行分割,保存在数组中;

toCharArray(),将字符串转换为字符数组;

trim()去除字符串前后的空格,注意,不对字符串进行更改,而是返回相应副本;

substring()截取字符字串;

toLowerCase(),toUpperCase()进行字符串的大小写转换;

indexOf(),lastIndexOf()在字符串中查找子串位置;

charAt()返回字符串中指定位置的字符;

startsWith(),endsWith()判断字符串的开始和结尾是否为指定字符串;

compareTo(),按字典顺序比较字符串;

 

10.Arrays对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明)

Arrays.fill(),填充数组,可用于数组初始化、赋值;

Arrays.sort(),对数组进行排序;

Arrays.copyOf(),Arrays.copyOfRange对数组进行复制;

 

11.注意static关键词的使用

具体解析见技术博客:http://www.cnblogs.com/dolphin0520/p/3799052.html

在使用的时候,如要在类外部调用的方法、变量都需要加上static限制符,而带有static限制符的类(方法)若需要调用其他方法或全局变量,那么被调用的方法和全局变量也必须有static修饰(这是因为非静态变量必须要创建实例才能被调用)。一般用于不需要创建实例的类(方法),例如用作工具的类。

要区分static与权限修饰符的区别,static的目的是,在不创建实例的情况下也可使用static变量和方法,而权限修饰符则规定了该方法与变量的使用范围。

 

12.Java的集合类保存数据说明

Arraylist、HashMap等集合类是java中的一个特色, 但在其中只能保存引用型的数据,不能保存基本数据。即:Integer可以但int不行。

 

13.对于class的权限修饰符说明

对于顶级类(包内部第一层的类)来说,只有public修饰符可用,表示可跨包使用该类,若不用public则默认在该包内可用,一个.java文件中使用public的类至多存在一个。对于顶级类的内部类,其权限修饰符为private、protected、public与默认。

关于内部类的权限问题需要深入研究(比如内部类中存在private变量,需要在外部类的内部使用该变量等情况),此处暂时跳过。

 

14.判断一个类的两个对象是否相等

除了基础变量,引用变量(对象)不能使用两个等号==去判断值是否相等(一个类生成的两个对象是否相等),需要使用equals方法。但注意的是,一般用户定义的类的equals方法内部都是使用双等号判断的,要实现判断的效果还需要用户重载equals。(就是自己写一个方法判断)

 

15.基本变量对应的包装类中可能常用的方法

Integer

equals(),比较两个integer对象的值是否相等

byteValue(),intValue(),shortValue(),返回对应类型的值

toString(),将Integer对象转换为String对象(toBinaryString()、toHexString()、toOctalString()同理)

Integer.valueOf(),将String对象转换为Integer对象

Integer.parseInt(),将String对象转换为int变量。

Boolean

Byte

Character

Character.inUpperCase()、Character.inLowerCase(),判断是否为大写、小写字符

Character.toUpperCase()、Character.toLowerCase(),转换为大写、小写字符

toString(),将字符转化为字符串

Double(Float可以参考Doubel,方法是一样的)

intValue(),返回整形变量

toString(),返回字符串

Double.valueOf(),将String对象转换为Double对象

 

总结:需要进行基础类的转换时,可使用toString()转换成字符串,再将字符串用各个类的valueOf转换为需要的类。

 

16.常用数学计算方法

DecimalFormat类

当中的各个方法对数字进行格式化,得到的是字符串;

Math类

三角函数方法,可进行各类三角函数计算,包括弧度角度互换

指数函数方法,平方、平方根、立方、立方根方法等

取整函数方法,向上、向下取整,最近取整

最大值最小值绝对值

随机数方法(产生0到1之间的任意double型数值)

Random类

nextInt()返回一个整数、nextLong()返回一个长整型、nextBoolean()返回一个布尔变量、nextFloat()返回一个浮点数

 

17.关于方法重写(不同于重载!!!!)

重写方法时,可以修改方法的修饰符、返回值(有限制)类型(参数类型、个数不可变),大多数情况下父类中的final方法不可重写(private final在子类中不可见,可重写,是比较特殊的情况)

子类方法对父类方法重写时,子类方法的修饰符必须比父类方法的修饰符权限更大;

子类对父类方法从重写时,若要修改子类方法中返回值类型,该类型必须是父类中同方法返回值的子类;

 

18.关于方法重写与重载的区别

在同一个类中,方法无法重写,即在一个类中不能存在两个相同方法名、参数个数、参数类型的方法,在同一个类中,方法可以重载,即一个类中允许多个相同的方法名,不同的参数类型、参数个数的方法存在。方法的重写涉及到父类、子类至少两个类,若要重写,不能修改方法的参数类型和个数,方法的重载只在一个类中发生,若要重载,必须要修改参数类型、个数。所有的父类中的方法都会在子类中被继承,所以父类与子类中存在两个方法名相同、参数不同的方法时,可以看作先被继承,后被重载。

 

19.抽象类(abstract关键字)

抽象类只能被继承,没有其他任何功能,而抽象类中的抽象方法在被继承后必须要进行重写,抽象方法没有方法体。若类中含有抽象方法,则该类必定为抽象类。

 

20.接口

接口(interface)的权限修饰符(待解决),接口中的方法均为public且不含方法体需要继承后重写,

先不管原理谈应用,接口一般使用public修饰,不加public的接口只能在同包中的不同类中使用(依然是默认的protected),加上public的接口才能跨包使用,但是只有与.java名称相同的interface才能使用public。而在接口内部,除去static、default方法,其他方法均不能有方法体。

 

21.对象的转型

对象转型分为向上转型和向下转型,子类对象可以一直向上转型(会自动转型),父类对象的转型要考虑其是否属于子类对象才能转(需要强制转型)。如:A a = new B();,B为A的子类,则最终a当作A类型的对象,但本质上仍是B类,父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了,即a可以调用B类型中从A类继承到的方法和属性,但不能调用B类中独有的方法和属性。在方法调用时同理,假设C继承于B继承于A,则C类型对象c在调用类中某一方法时,会在可用范围内(可用范围参考上一句)先查找以C类型为参数的方法重载版本,若不存在,则向上转型为B并查找B类型为参数的方法重载版本,直至找到可执行的方法重载版本,若不存在,则无法调用,会报错。

 

22.关于类包

在实际开发中,应为所有的类指定类包,包的声明必须是文件中第一行非注释代码,所有类包均为小写字母构成。导入包时,若使用*来导入包中的所有类,则并不会导入子类,如需要导入子类还需要重新import。使用import static 可以导入类当中的静态成员。

 

23.关于常量

final定义的常量分类局部常量和全局常量,局部常量在其生命周期内不能重定义,但是需要的话可在每次创建的时候都可以赋新值,全局常量一般使用public static final,在程序运行期间,全局常量的值都不会被改变。

注意!有一个特殊情况可看作改变了全局常量,即全局常量是个引用常量,则被引用的对象是可以改变的,但是引用常量不变,虽然理论上全局常量仍不变,但是实际使用的效果就如同全局常量变了一样。

 

24.break、continue、return

忽略break后面的代码,跳出本次循环(一层),若结合标签则可以跳到任意层(不推荐);continue用于跳过本次循环,继续执行下次循环,有效范围同为一层。return语句直接退出了函数,无论是否在循环中。

 

25.字符串的替换操作

Java中实现字符串的替换操作主要有三个函数,replace、replaceAll、replaceFirst,三者区别在于:第一个是使用字符串替换所有的目标,第二个是使用正则表达式替换所有目标,第三个是使用正则表达式替换提第一个目标。

 

26.关于非0即真

在java当中没有这个特性,所以在判断真假时要尽量使用布尔变量。

 

27.关于Collections的排序

使用Collections的sort方法,可以对所有List类型进行排序,若传入一个comparator对象则可实现个性化的排序(需要重写其中的compare方法)

 

28.Super关键字的使用

super只能在类的定义当中使用,代表子类的父类。(只能代表父类,而非像this一样代表一个实例)

一种情况:当子类中的(例如:method())方法被重写之后,子类有自己的method()和父类的method(),但是直接调用method()只能调用到子类的method(),若要调用父类的method(),则要使用super关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值