黑马程序员——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; } } }}
- 黑马程序员—JAVA基础
- 黑马程序员—Java基础
- 黑马程序员—Java基础:初识Java
- 黑马程序员——java编程基础
- 黑马程序员——Java编程基础
- 黑马程序员——java编程基础
- 黑马程序员——JAVA基础编程
- 黑马程序员——java基础
- 黑马程序员——java基础概述
- 黑马程序员——java基础小结
- 黑马程序员——java编程基础
- 黑马程序员——Java基础
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---集合
- 黑马程序员——Java基础---GUI
- 黑马程序员——Java基础一
- 黑马程序员——java基础加强
- 黑马程序员——Java语法基础
- Java反射机制梳理(二)
- ubuntu12.04交叉编译opencv移植到arm板
- Eclipse配置JavaWeb环境
- 以in-memory方式运行的canopy生成算法
- C语言——位操作
- 黑马程序员——Java基础
- 设置button大小同文字一样大
- Noj Red packet 1651 (二分)
- srebmuNfaeLottooRmuS.129
- 多线程系列原创文章的说明
- Python爬虫
- Android EditText中的inputType详解
- TOM启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListe
- CM添加kafka服务