黑马程序员——Java基础

来源:互联网 发布:小米平板2 刷机 mac 编辑:程序博客网 时间:2024/05/21 12:49

 ------- android培训、java培训、期待与您交流! ----------

java基础知识概述

Java是Sun(Stanford University Network)公司开发出来的一套编程语言,主设计者是詹姆斯·高斯林James Gosling,最大的特点就是跨平台运行。

Java的开发环境主要使用JDK(Java Development ToolKit-Java开发程序包),JDK是Java的核心,包含JRE(Java Runtime Envirnment-Java运行环境),而JVM(Java Virtual Mechinal-Java虚拟机)又是JRE中的一部分,实现可移植性靠的是JVM。

JVM:保证Java语言跨平台
JRE:Java程序的运行环境
JDK:Java程序的开发环境

三者之间的关系:
JDK:JRE+工具
JRE:JVM+类库

JDK的下载和安装

JDK的下载地址:www.oracle.com

安装JDK以后,需要配置Path,进入“我的电脑”中“属性”里面的“高级系统设置”选择“环境变量”。
在系统变量中新建变量名称为JAVA_HOME,变量值为jdk的安装目录。然后配置path,一定要保留原先的path变量,在原先的基础上用”;”分隔开来,在最前面添加%JAVA_HOME%\bin,代表bin目录的路径。保存好以后运行命令提示符,输入命令“javac”出现帮助说明就证明配置正确。

path设置的路径是JDK安装目录下bin文件夹的路径,bin文件存放的是可执行文件,配置path,执行可执行文件的时候,就会自动去path配置的路径中查找,如果不设path,只有加上bin文件夹的完整路径才可以,设置过以后,可以直接运行可执行文件,不需要再写路径就可以。path是为了方便可以在任意一个路径下去执行所要执行的可执行文件

javac.exe具有编译功能,可以把.java文件编译成为.class文件(字节码文件)。java命令可以执行.class文件

classpath默认当前运行路径,在系统变量中配置classpath,配置的路径为*.class放置的文件夹的路径,配置完成以后,无论java命令在任何位置执行,都会从classpath路径中查找文件。

临时设置classpath路径方法:set classpath=“路径”,只作用于当前运行的这个命令提示符窗口,窗口关掉以后就失效

java基础

名称规范:

包名:多单词组成时所有字母都小写。
例如:xxxyyyzzz

类名接口名:多单词组成时,所有单词的首字母大写。
例如:XxxYyyZzz

变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
例如:xxxYyyZzz

常量名:所有字母都大写。多单词时每个单词用下划线连接。
例如:XXX_YYY_ZZZ

注释:

注释就是对程序进行解释说明的文字,解释说明程序,提高了代码的阅读性,可以帮助我们调试程序。
A:单行注释 //
B:多行注释 /**/
C:文档注释 /* /

常量:

常量就是在程序执行的过程中,其值不发生改变的量。

字面值常量:整数、小数、字符、字符串、布尔、null
自定义常量:类、接口、数组

变量:

变量是内存中的一个存储空间,在程序运行过程中,其值在指定范围内可以改变的量。

变量的定义格式:
数据类型 变量名 = 初始化值;
例如:int i = 123;

进制:

二进制 由0,1组成。以0b开头。
八进制 由0,1,…7组成。以0开头。
十进制 由0,1,…9组成。整数默认是十进制。
十六进制 由0,1,…9,a,b,c,d,e,f(大小写均可)组成。以0x开头。

进制转换:
其他进制到十进制:系数*基数^权次幂之和
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一位上的数据,从右,并且从0开始编号,对应编号就是该数据的权。

十进制到其他进制:除基取余,直到商为0,余数反转。

基本数据类型:

整形:byte、short、int、long
浮点型:float、double
字符型:char
布尔型:boolean
整数默认是int类型,浮点数默认是double。
长整数要加L或者l,单精度的浮点数要加F或者f。

引用数据类型:

类、接口、数组

数据类型转换:
默认转换:
从小到大—byte、short、char – int – long – float – double
byte、short、char之间不相互转换,直接转成int类型参与运算。
强制转换:
从大到小—目标数据类型 变量名 = (目标数据类型) (被转换的数据);
例如:
double d = 12.25;
int i = (int)d;

float f1 = 12.345f;//本身就是一个float类型float f2 = (float)12.345;//把double强制转换为float
byte b1 = 3;byte b2 = 4;//把b1和b2默认转换为int类型之后再相加,结果为int类型,不能默认转换为byte,报错。byte b3 = b1 + b2;//常量是先把结果计算出来,结果如果在byte范围就不报错。byte b4 = 3 + 4;

计算机中数据的运算都是补码进行的。
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
原码就是机器数。

反码的表示方法是:
正数的反码是其本身。
负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

补码的表示方法是:
正数的补码就是其本身。
负数的补码是在其原码的基础上,符号位不变,其余各位取反。
最后+1。 (即在反码的基础上+1)

byte b = (byte)130;//结果为-126获取130这个数据的二进制。00000000 00000000 00000000 10000010这是130的原码,也是反码,还是补码。做截取操作,截成byte类型的了。10000010 这个结果是补码。已知补码求原码。    符号位          数值位补码: 1           0000010反码: 1           0000001原码: 1           1111110
//字符串参与运算System.out.println('a'+1+"hello");//98helloSystem.out.println("hello"+'a'+1);//helloa1,字符串在前+为字符串连接符

运算符:

算术运算符:
+:加号、正号、字符串连接符
-:减号、负号
/和%:
/取得是商,%取得是余数
++和–:
自增和自减
放在操作数的前面:先自增或者自减,再参与操作

int a = 10;int b = ++a;//11


放在操作数的后面:先参与操作,再自增或者自减

int a = 10;int b = a++;//10


赋值运算符:
=、+=、-=、*=、/=、%=
隐含了自动强制转换。

比较运算符:
==、!=、>、>=、<、<=
无论运算符两端简单还是复杂最终结果是boolean类型。
注意:千万不要把==写成了=

逻辑运算符:
& :与
|:或
^:异或(相同为假,相反为真)
!:非
&& 和||:具有短路效果的与和或
逻辑运算符用于连接boolean类型的式子

public class Test{    public static void main (String args []){        int i = 2;        if (i++>3&&i++>4)            System.out.println("true");            System.out.println(i);    }}//用&&最后输出i的值是3,如果用&&,前面的表达式错误,就不会再计算&&后面的内容//用&最后输出i的值是4,用&,不管前面的表达式是正确还是错误,后面的内容都会再计算。

位运算符:
& 按位与
| 按位或
^ 异或(相同为0,相反为1)
~ 取反
<<  左移位>>  右移位>>> 无符号右移位public class OperatorDemo{    public static void main (String args [])    {        int a = 3 >> 2;        int b = 3 >> 2;        int x = -3 >> 2;        int y = -3 >>> 2;        System.out.println(a);        System.out.println(b);        System.out.println(x);        System.out.println(y);    }}运行结果为:0 0 -1 1073741823对于正数来说没有任何区别。-3的补码进行右移两位运算11111111-11111111-11111111-1111110111111111-11111111-11111111-1111111101右移两位之后加上两位符号位11-3的补码进行无符号右移两位运算11111111-11111111-11111111-1111110100111111-11111111-11111111-1111111101右移两位之后用00补位

三元运算符:
格式:比较表达式?表达式1:表达式2;

执行流程:
计算比较表达式的值,看是true还是false。
true,表达式1就是结果。
false,表达式2就是结果。

java流程控制语句

顺序结构:从上往下,依次执行
选择结构:按照不同的选择,执行不同的代码
循环结构:做一些重复的代码

if语句

格式1    if(比较表达式) {        语句体;    }    执行流程:        判断比较表达式的值,看是true还是false        true,执行语句体        false,不执行语句体格式2    if(比较表达式) {        语句体1;    }else {        语句体2;    }    执行流程:        判断比较表达式的值,看是true还是false        true,执行语句体1        false,执行语句体2格式3    if(比较表达式1) {        语句体1;    }else if(比较表达式2){        语句体2;    }    ...    else {        语句体n+1;    }执行流程:    判断比较表达式1的值,看是true还是false    true,执行语句体1    false,继续判断比较表达式2的值,看是true还是false    true,执行语句体2    false,继续判断比较表达式3的值,看是true还是false    ...    如果都不满足,就执行语句体n+1

注意:
if语句控制的语句体是一条语句,可以省略大括号;如果是多条,不能省略。建议永远不要省略。
else后面如果没有if,是不会出现比较表达式的。

三元运算符和if…else的关系:
三元运算符能够实现的,if…else都能实现。反之不成立。
三元运算符必须有一个结果返回,不能是输出语句。

switch语句

switch(表达式) {    case 值1:        语句体1;        break;    case 值2:        语句体2;        break;    ...    default:        语句体n+1;        break;}格式解释说明:    表达式:可以是byte,short,int,char        JDK5以后可以是枚举        JDK7以后可以是字符串    case:后面的值是要和表达式进行比较的值    break:表示程序到这里中断,跳出switch语句    default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

注意:
case后面只能是常量,不能是变量,多个case后面的值不能出现相同的。
default可以省略,但是不建议,它的作用是对不正确的情况给出提示。
break可以省略,但是会出现一个现象:case穿透。建议不要省略。
default可以在任意位置。建议在最后。

循环语句

三种循环语句:for,while,do…while

for循环语句格式:        for(初始化语句;判断条件语句;控制条件语句){            循环体语句;        }        执行流程:            执行初始化语句            执行判断条件语句                如果这里是true,就继续                如果这里是false,循环就结束            执行循环体语句            执行控制条件语句            回到判断条件语句while循环格式:        while(判断条件语句) {            循环体语句;        }        扩展格式:        初始化语句;        while(判断条件语句){            循环体语句;            控制条件语句;        }do...while循环格式:        do {            循环体语句;        }while(判断条件语句);        扩展格式:        初始化语句;        do {            循环体语句;            控制条件语句;        }while(判断条件语句);

注意:
一定要注意修改控制条件,否则容易出现死循环。
最简单的死循环格式
while(true){...}    for(;;){}   

while循环可以和for循环等价转换。

for和while的区别:
for语句的控制条件变量,在循环结束后不能再使用,而while的可以继续使用。
for适合于一个范围的判断,while适合次数不明确的。

三种循环的区别:
do…while循环至少执行一次循环体。
for和while必须先判断条件是否是true,然后后才能决定是否执行循环体。

控制跳转语句

break:中断的意思,跳出单层循环,用在循环和switch语句中,离开此应用场景无意义。

continue:继续,跳出单层循环的一次,可以继续下一次,用在循环中,离开此应用场景无意义。

return:返回, 用于结束方法的,一旦遇到return,程序就不会在继续往后执行。

java方法

方法:完成特定功能的代码块。
格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {        方法体语句;        return 返回值;    }   

修饰符:目前就用 public static
返回值类型:功能结果的数据类型
方法名:方法的名字,方便调用该方法。
参数类型:参数的数据类型
参数名:变量
实参:实际参与运算的数据
形参:方法上定义的,用于接收实际参数的变量
方法体语句:完成功能的代码块
return:结束方法
返回值:功能的结果,由return带给调用者。

定义方法需要两个明确:
返回值类型:结果的数据类型
参数列表:参数的个数及对应的数据类型

方法重载:
在同一个类中,方法名相同,参数列表不同。与返回值无关。
参数列表不同:参数的个数不同,参数的对应的数据类型不同。

java数组

一维数组

数组:存储同一种数据类型的多个元素的容器。

特点:每一个元素都有编号,从0开始,最大编号是长度-1。 编号的专业叫法:索引

格式:数据类型[] 数组名;

数组动态初始化:只给长度,系统给出默认值

int[] arr = new int[3];

数组静态初始化:给出值,系统决定长度
int[] arr = {1,2,3};

二维数组

二维数组:元素是一维数组的数组。

格式:

数据类型[][]数组名 = new 数据类型[m][n];int[][] arr1 = new int[2][3];数据类型[][] 数组名 = new 数据类型[m][];int[][] arr2 = new int[3][];数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};int[][] arr3 = new int[][]{{1,2}{2,3}{3,4}};数据类型[][] 数组名 = {{...},{...},{...}};int[][] arr4 = {{1,2}{2,3}{3,4}};

java参数传递

Java中只有值传递。
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数

class Test {    public static void main(String[] args) {        int a = 10;        int b = 20;        System.out.println("a:"+a+",b:"+b); //a:10,b:20        change(a,b);        System.out.println("a:"+a+",b:"+b); //a:10,b:20    //基本类型:将一个参数传递给一个方法时,方法接收的是原始值的一个副本。    //如果函数修改了该参数,仅改变副本,而原始值保持不变。        int[] arr = {1,2,3,4,5};         change(arr);        System.out.println(arr[1]); //4    //引用类型:将一个参数传递给一个方法时,方法接收的是原始值的地址值。而不是值的副本。    //因此,如果方法修改了该参数,原始值也随之改变。    }    public static void change(int a,int b) {        System.out.println("a:"+a+",b:"+b);        a = b;          b = a + b;         System.out.println("a:"+a+",b:"+b);    }    public static void change(int[] arr) {         for(int x=0; x<arr.length; x++) {            if(arr[x]%2==0) {                arr[x]*=2;            }        }    }}



0 0
原创粉丝点击