黑马程序员(一)Java编程基础

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Java语言的特点简单易学,面向对象,安全可靠,跨平台,支持多线程

跨平台性实现原理Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟 机,该系统就可以运行java程序。

   我的总结:其实java语言本身不是跨平台,它需要在Java虚拟机上才能运行,所以只要在各种系统上安装了对应的Java虚拟机,就能运行Java程序

JDK和JRE的区别:JDK是Java开发环境,包含JDK和Java编译器,Java运行工具,Java文档生成工具,Java打包工具等。JRE是Java运行环境,是提供给普通用户使用的,JRE只包含运行工具没有编译工具

 

Java代码的基本格式:
格式:
修饰符 class 类名{
程序代码
}
注意:1:Java中的程序代码可以分为结构定义语句和功能执行语句,其中,结构第一语句用于声明一个类或者方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束。例如下面语句
      System.out.println("hello Java");
2:Java语言是严格区分大小写的,定义类要注意。
3:Java程序中一句连续的字符串不能分开在两行中书写,例如,下面的语句在编译时就会报错;
          System.out.println("这是我的第一个
Java程序");
注释
单行注释:用于对程序中的某一行代码进行解释,用符号”//“表示。例如 int x = 5; //定义一个整型变量;

多行注释:注释的内容可以为多行,用符号“/*”开头,用“*/”结尾。

文档注释:是Java特用的一种注释方式。以符号“/**”开头,并在注释内容末尾一“*/”结尾。使用javadoc 命令将文档注释提取出来生成帮助文档。

我的总结 :单行注释可以嵌套,多行和文档注释都不能嵌套使用

标示符
 给一些符号用于给包、类、方法、变量标记的成为标示符。标示符可以是任意顺序的大小写字母、数字、下划线和美元符号,但不能以数字开头,不能是Java中的关键字。

标示符规范:
   1 :包名所有字母都小写,例如 cn.itcast.java
    2 :类名和接口名每个单词的首个字母要大写,例如 Demo,HelloJava
     3: 常量名所有字母要大写,单词之间用下划线连接 例如 DAY_OF_MONTH
     4 :变量名和方法名首个单词字母小写,从第二个单词开始每个单词首字母都大写 例如 getName()
  5 :尽量用有意义的单词来定义标示符,做到见名知意
常量

定义:

占据着内存中的某一个存储区域;

        该区域有自己的名称(变量名)和类型(数据类型);

       该区域的数据可以在同一类型范围内不断变化;

         在程序中固定不变的值,是不能改变的数据。例如数字 5 ,字符 'b'等是常量;

常量 分类
整型常量  :就是整数类型的常量,有二进制、八进制、十进制、十六机制等四种表现形式
浮点数常量:就是数学中的小数,分为单精度浮点数float 和双精度浮点数double两种类型
字符常量:一个数字、英语字母、符号等等
字符串常量 :表示一串连续的字符 
布尔常量: 只有true和false两个值,用于表示一个事物的真和假
null常量: 只有null一个值,表示对象的引用为空
变量
定义:程序的运行过程中,在指定范围内发生改变的量。 
格式: 数据类型 变量名 = 初始化值
变量的数据类型 
(1) 基本类型:4类8种: 
    整型: byte 1 short 2 int 4 long 8 
       浮点型: float 4 double 8 
   字符型: char 2
   布尔型: boolean 不明确。可以认为是1个字节。 
(2) 引用类型:类,接口,数组。
隐式转换  :  (从小到大) byte,short,char -- int -- long -- float -- double
强制转换(从大到小) 格式: (数据类型)数据; 
常见面试题  : byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; byte b4 = 3 + 4;
我的总结:  整数默认是int类型,long类型需要加L或者l后缀, 浮点数默认是double类型,float类型需要加F者f缀,boolean类型不参与转换。

局部变量:不是声明在类体括号里面的变量;

  局部变量使用前必须初始化值;

局部变量没有默认初始化值;

局部变量的作用域是从定义开始到定义它的代码块结束;

成员变量:在方法体外,类体内声明的变量

成员变量的作用域是整个类中;

我的总结:成员变量一般定义在类中,局部变量一般定义在方法中,成员变量作用域比局部变量大

运算符

运算符:就是把常量和变量连接的符号,一般参与运算使用。
运算符分类:
算术运算符:
+,-,*,/,%,++,--+:正号,加法,字符串连接符。
%:取得余数
左边如果大于右边,结果是余数。
左边如果小于右边,结果是左边。
左边如果等于右边,结果是0。
正负号跟左边一致。
++/--:
++ 其实相当于把数据+1
单独使用:
在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++/--
如果在数据的前边,数据先++/--,在操作。

赋值运算符:
=,+=,-=,*=,/=,%=
int a = 10;       把10赋值给int类型的变量a。
a += 20;          把左边和右边的和赋值给左边。

注意事项:
a = a + 20;
a += 20;
结果是等价的,理解不是等价的。
因为+=这种运算符,内含了强制类型转换功能。
比如:
short s = 2;
s+=3;
等价于
s = (short)

关系运算符==,!=,>,>=,<,<=
特点:关系运算符的结果都是boolean类型。
       请千万注意:== 不要写成 =

逻辑运算符:&,|,!,^,&&,||
&:有false则false
|:有true则true
!:true变false,false变true
^:相同false,不同true

&&:有false则false
||:有true则true

&&和&的区别是:如果左边有false了,右边将不再执行。
 ||和|的区别是:如果左边有true了,右边将不再执行。

 我的总结:当左边能得出运算结果右边不再执行。

开发中常用:
&&,||,!(s+3);
位运算符:
^ : 一个数据对同一个数据^两次,结果还是数据本身。
举例:a ^ b ^ b = a
三元运算符:
格式:条件表达式?表达式1:表达式2
执行流程:
根据条件表达式返回的是true还是false,决定结果是什么。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。
举例:
int a = 100;
int b = a > 50 ? 200 : 100;
请问b的值?200
选择结构语句
if条件语句
作用:用于做判断使用的。
   常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。
格式:
第一种格式
if(条件表达式)
{
语句体;
}
执行流程:
如果条件表达式为true,就执行语句体;
否则,什么都不执行。

第二种格式
if(条件表达式)
{
语句体1;
}
else
{
语句体2;
}
执行流程
如果条件表达式为true,就执行语句体1;
否则,就执行语句体2;

特殊
可以和条件表达式在某些情况下进行替换。
一般是在赋值的情况下可以。

举例:
获取两个数中的最大值。

第三种格式
if(条件表达式1)
{
语句体1;
}
else if(条件表达式2)
{
语句体2;
}
...
else
{
语句体n;
}
执行流程:
如果条件表达式1为true,就执行语句体1;
如果条件表达式2为true,就执行语句体2;
...
否则,就执行语句体n;
a:什么时候时候哪一种if语句。
第一种格式在判断条件为一种情况下使用。
第二种格式在判断条件为两种情况下使用。
第三种格式在判断条件为多种情况下使用。
b:每一种if语句其实都是一个整体,如果有地方执行了,
  其他的就不执行了。
c:如果if或者else里面控制的语句体是一条语句,是可以省略大括号的,
  但是,如果是控制多条语句,就必须写上大括号。
    建议:永远写上大括号。
d:       大括号和分号一般不同时出现。
switch条件语句
作用用于做选择使用的。一般用于几个常量的判断。
switch会把几个常量值直接加载到内存,在判断的时候,效率要比if高。
所以,针对几个常量的判断,一般选择switch语句。
格式:switch(表达式)
{
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n;
break;
}

针对格式的解释
switch:
表示这里使用的是switch语句,后面跟的是选项。表达式:byte,short,int,char
        JDK5以后可以是枚举
JDK7以后可以是字符串
case:
表示这里就是选项的值,它后面的值将来和表达式的值进行比较
case后面的值是不能够重复的。
break:
switch语句执行到这里,就结束了。
default:
当所有的case和表达式都不匹配的时候,就走default的内容。
它相当于if语句的else。一般不建议省略。
执行流程
进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,那么,就执行default的内容。
注意事项
a:default整体可以省略吗?
可以,但是不建议。
b:default的位置可以放到前面吗?
可以,但是不建议。
c:break可以省略吗?
可以,但是不建议。
default在最后,break是可以省略的。
case后面的break可以省略,但是结果可能有问题。
d:switch语句什么时候结束呢?
就是遇到break或者执行到程序的末尾。

case之间与default没有顺序。先执行第一个case,都没有匹配的case值执行default。

结束switch语句的两种情况:遇到break,switch语句执行结束。

如果匹配的case或者default没有对应的break,那么程序会从第一次匹配的case语句开始继续向下执行,运行可以执行的语句,直到遇到break或者switch结束为止。

循环语句
什么时候用?
如果我们发现有很多重复的内容的时候,就该考虑使用循环改进代码。 
循环的组成:   
 A:循环体,就是要做的事情。
 B:初始化条件。一般定义的是一个初始变量
 C:判断条件。用于控制循环的结束。
 D:控制条件。用于控制变量的变化。一般都是一个++/--操作。 
循环的分类
for 循环
for(初始化条件;判断条件;控制条件)
{
循环体;
}
执行流程:
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值:
true:执行循环体。
false:就结束循环。
d:最后执行控制条件。返回到b继续。
while循环:
初始化条件;
while(判断条件)
{
循环体;
控制条件;
}
执行流程
a:先执行初始化条件;
b:执行判断条件
c:根据判断条件的返回值:
    true:执行循环体。
    false:就结束循环。
d:最后执行控制条件。返回到b继续。

do while 循环
初始化条件;
do{
循环体;
控制条件;
}while(判断条件);
执行流程
a:先执行初始化条件;
b:执行循环体和控制条件;
c:执行判断条件
d:根据返回值
true:返回b。
false:就结束循环。

我的总结
a:一般使用for循环或者while循环。而且这两种循环是可以等价转换的。
b:do...while循环至少执行一次循环体。
跳出语句
什么时候用?有些时候,我们需要对循环进行一些控制终止,这个时候,就出现了两个关键字:
break和continue
特点
A:它们都必须在循环中(break还可以在switch中。)。
  一般在循环的判断中。
B:如果单独使用break和continue,后面是不能有语句的。
区别
A:break 结束当前循环。
B:continue 结束本次循环,进入下一次循环。
如何退出嵌套循环?
用带标签的循环。
格式:
标签名:for(){
for(){
if()
{
break 标签名;
}
}
}
我的总结:

continue 、break两个语句后面都不能有语句,因为执行不到。

break是结束循环语句,continue语句是跳过本次循环,继续下次循环。

 函数
定义:定义在类中,有特定功能的一段小程序。
函数的格式
修饰符 返回值类型 函数名(形参类型 形式参数1,形参类型 形式参数2...)
{
函数体;
reutrn 返回值;
}
A:修饰符public static
B:返回值类型程序最终结果的数据类型
C:函数名其实就是函数的名称,方便我们调用。
D:参数
形参类型数据类型
形式参数就是接收实际参数的变量
实际参数就是实际参与操作的变量(常量)
E:函数体就是按照正常的逻辑完成功能的代码。
F:返回值就是程序的最终结果
G:reutrn 返回值哪里调用程序,return就把结果返回到哪里。
函数的特点
A:函数与函数之间是平级关系。不能在函数中定义函数。
B:运行特点函数只有被调用才执行。
案例
有明确返回值的例子:

A:求两个数据的和
B:求两个数据的最大值
C:比较两个数是否相等

void类型例子:
A:nn乘法表
B:根据给定的行和列输出一个*组成的长方形
函数的调用
A:有明确返回值
a:单独调用一般没有意义。
b:输出调用但是如果想拿结果继续操作,就有问题了。所以,不好。
c:赋值调用

B:void类型
单独调用
函数重载
A:函数名相同,参数列表不同(个数不同,对应的类型不同)。
  与返回值类型无关。
B:举例:
public static int sum(int a,int b){...}
public static int sum(int a,int b,int c){...}
public static int sum(float a,float b){...}
数组
定义:数组是存储同一种类型的多个元素的容器。
好处:数组中的元素会被自动从0开始编号,方便我们获取。
格式
A:int[] arr = new int[3];
B:int arr[] = new int[3];
C:int[] arr = new int[]{1,2,3};
D:int[] arr = {1,2,3};
内存中情况
A:栈存储局部变量使用。
使用完毕,立马消失。
B:堆所有new出来的都在堆里面。
a:每一个实体都有地址值
b:每一个实体内的内容都有默认值
整数:0
浮点数:0.0
字符:'\u0000'
布尔:false
c:在垃圾回收器空闲的时候被回收。
C:方法区
D:本地方法区
E:寄存器
二维数组
格式:
A:int[][] arr = new int[3][2];
B:int[][] arr = new int[3][];
C:int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
数组的使用:

Java语言的数组索引是从0开始的,也就是说数组里的第一个元素的索引是0,第二个元素的索引是1,依次可以类推。

常见操作:

给数组元素赋值

数组名[索引] = 数组类型的值 ;

访问数组元素

数组类型 变量 = 数组名[索引];

得到数组的长度

int len = 数组名.length;     //length是数组的属性

遍历数组(备注:length属性和循环语句)

数组元素的索引范围(0,长度—1)

 

求最大值:



冒泡排序




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值