• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

微笑Angle

  • 管理

View Post

黑马程序员_编程基础之第一篇---java语言基础一

java语言基础

java语言基础组成包括:

      关键字、标识符、注释、常量和变量、运算符、语句、函数、数组

1.关键字---被java赋予了特殊含义的单词称为关键字;

2. 注释-----分为单行注释//、多行注释/**/、文档注释/** **/,注意文档注释是java语言所特有的。注释的作用:

   一是用来注解说明程序的。

   二是用来调试程序的。

注释是一个程序员必须要有的良好的变成习惯;

初学者编写程序可以养成习惯:先写注释再写代码;

3. 标识符----在程序中自定义的一些名称。

      规则:由数字0-9、大小写字母a-z、另外两种符号_$组成。

定义合法标识符规则:

      1.数字不可以开头

      2.不可以使用关键字

例如:class、static、1demo等都是不被允许的。

java中是严格区分大小写的,大小写不同的两个名称代表了不同的含义。

需要注意的一点是:main并不是关键字,却是被虚拟机所识别的一个名称。

作为了解的java的名称规范(多单词组成时):

包名:多单词组成时,所有字母都小写;xxyyzz

类名接口名:多单词组成时,所有单词的首字母大写;XxYyZz

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

xxYyZz

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

XX_YY_ZZ

4.常量

常量指java当中固定不变的数据。

分类:

1.整数常量

2.小数常量

3.布尔类型常量,只有两个数值true和false

4.字符常量---字母、数字符号,用单引号’‘区分,只能存放一个字符。’ab‘是错误的

5.字符串常量--"ab"存在好多字符;“”空字符串

6.null常量--只有一个数值null

对于整数,java有三种表现形式:

十进制:0-9满十进一(23)

八进制:0-7满八进一,用0开头(023)

十六进制:0-9 A-F 满十六进一,用0x开头表示(0x23)

计算机内存中存放的都是二进制数据。

规律:进制越大,表现形式越短!

进制的转换:

1.二进制和十进制的转换

十进制---->二进制

原理:对十进制进行除2运算。

6的二进制=110

6除2  余数为0

3除2  余数为1

1除2  余数为1

二进制---->十进制

原理:二进制乘以2的过程

110的十进制

0*2的0次方+1*2的1次方+1*2的2次方=6

0110101的十进制=

1*2(0)+0*2(1)+1*2(2)+0*2(3)+1*2(4)+1*2(5)+0*2(6)=52

八进制和十六进制的转换

2.转成十六进制(0-9 A-F)

0101-1010的十六进制

四个二进制位就是十六进制:

0101=5

1010=10

在十六进制中没有10,用A表示

所以结果为0x5A。

---------------------------------------

3.八进制转换

0101-1010

001 011 010的八进制:

三个二进制位就是八进制

001=1

011=3

010=2

结果为:0132

总而言之,二进制转换成任意进制,都是乘法运算;十进制转换成二进制是除法运算;

负数的二进制表现形式:

6=110

-6:其实就是6的二进制取反,然后加1

0000-0000 0000-0000 0000-0000 0000-0110

        1111-1111 1111-1111 1111-1111 1111-1001

+      0000-0000 0000-0000 0000-0000 0000-0001

=1111-1111 1111-1111 1111-1111 1111-1010    

规律:负数的最高位是1。

5.变量

       就是将不确定的数据进行存储,也就是需要在内存中开辟一个空间。

如何开辟内存空间呢?通过明确数据类型,变量名称,数据来完成。

  格式:    数据类型 变量名=值;

A.基本数据类型

1.数值型

byte short int long (整数)

byte   -2(7)-2(8)-1  1B    short -2(15)-2(15)-1 2B

int   -2(31)-2(31)-1 4B    long -2(64)-2(64)-1        8B

float double(浮点)

单精度和双精度区别在于数字精度不同,float 占4B,double占8B,默认为double。

2.字符型

char------ 0-65535 2B

3.布尔类型

boolean------- true和false两种类型。

什么时候定义变量呢?

当数据不确定的时候,需要对数据进行存储时,就定义一个变量来 完成存储动作。

B.类型转换

自动类型提升(隐式转换)

byte b=3;

b=b+2;

第一步:b在运算时在计算机中占1B,而2占4B,1B(自动提升)+4B

第二步:b+2的结果赋给byte类型的b,可能会丢失精度,此时可以把运算结果强制转换一下

b=(byte)(b+2);

char类型也是可以进行运算的。'a'+1=98因为,char类型有对应的asc码表。

6.运算符

算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符

1.算术运算符+ - * / % ++ -- 、+(字符串连接符)

%规律:进行模运算时,左边如果小于右边,结果为左边;

                            左边如果等于右边,结果为0;

         负数进行模运算时,结果等于左边。

++:int a=3,b;

      b=a++;

结果b=3;a=4;

a++这句话的意思是说,给a变量的值进行+1操作,并把操作后的值重新赋值给a;

相当于a=a+1;

b=a++;运算顺序是,先将a的值赋给b,然后a再自增1;

b=++a;运算顺序是,a先自增1,然后赋值给b;这样运算的结果是a=4;b=4;

+(字符串相加):字符串数据和任何数据使用+相连接,最终都会变成字符串。

字符串数据和任何数据使用+都是相连接,最终都会变成字符串。

7.转义字符

通过反斜线\来转变后面字母或者符号的含义。

\n:换行;\r:按下回车键;都是换行

\b:退格(backspace);\t:制表符(tab);

反斜线只对后面的一个字母或者符号进行转义。

8.赋值和比较运算符

a.赋值运算符

 = += -= *= \= %=

面试题可能会遇到:

short s=4;

s=s+5;与short s=4;

s+=5;的区别在于:

前者是进行了先做加法,然后再赋值的运算,有一次自动提升的过程;

而后者只进行了一次赋值运算,把左右两边的和赋给左边;

两者最大的区别是后者会进行一次自动转换的动作,而前者是不会的。

b.比较运算符

== !- < > <= >=

instanceof(检查是否是类的对象)

==是比较运算符,它运算完的结果非真即假;

=是赋值运算符

注意:比较运算符“==”不能误写为“=”

 9.逻辑运算符

&与  |或  ^异或  !非  && ||

   6>x>3在程序中是不被允许的;因此,逻辑运算符用于连接布尔类型的表达式;

&---必须两边的布尔表达式都为真,结果才为真;

| ----只要有一个布尔表达式为真,结果就为真;

^----两个布尔表达式结果不相同,结果就为真;

!true=false;  !!true=true

&&双与(短路)

&和&&的区别:两者在运算结果上没有任何区别;

两个布尔表达式都为真的情况下,运算结果是没有任何区别的;

&&的时候,只要前者为false,后边的表达式压根就不会再执行了,也就是短路了;

&的时候呢,即使前者为false,后边的表达式也还会再执行一遍;

使用双与:执行效率大大提高,

||(双或)---有一个为真就行

|和||的区别:同样的,在运算结果上是没有任何区别的;

|:两边都参与运算;

||:只要检测出第一个表达式结果为true,第二个表达式也是不会执行的;

10.位操作符

<<左移  >>右移  >>>无符号右移  &与运算  |或运算  ^异或运算  ~反码

这里要牵扯到二进制运算了。

<<:3<<2=12  (3的二进制表示为011)

在内存中表示为:0000-0000 0000-0000 0000-0000 0000-0011

左移两位之后,后边两位补0,变成

0000-0000 0000-0000 0000-0000 0000-1100

这种情况下:计算出二进制对应的数字,便是3左移两位之后的结果啦!

>>:6>>2= 1   (6的二进制表示为110)

在内存中表示为0000-0000 0000-0000 0000-0000 0000-0110

右移两位之后,前边两位补0,后边的两位去掉

0000-0000 0000-0000 0000-0000 0000-0001

规律就是:一个数左移,数字会变大;右移的话,数字会变小;

3<<1=6;3<<2=12; 3<<3=24;

规律可想而知:在左移的情况下,一个数乘以2的(移的位数)的次方;

6>>1=3;6>>2=1;

在右移的情况下,结果就等于一个数除以2的(移的位数)的次方;

>>>:无符号右移

在>>的时候,最高位补0或1,由原有数据的最高位的值来定;

如果最高位是0,右移后,用0补空位;如果最高位是1,右移后,用1补空位;

在>>>的时候,无论最高位是0或1,右移后,都用0补;

& | ^:也可以作为位运算符来操作,简单来说就是对二进制进行操作;

原理如同逻辑操作符中&|^是一样的。

&:两者为真,结果为真;|:一者为true,结果为真;^:两者不同,结果为真;

6&3=2; 6|5=7; 6^5=3;

反码:就是取反;

小细节:^一个数异或同一个数两次,结果还是这个数;(可以用于加密)

位运算符联习:

1.最有效率的方式算出2乘以8等于几

思路:左移的原理:一个数乘以2的移的位数的次方

而8又恰好是2的3次方

代码如下:

System.out.println(2<<3);

2.对两个整数的值进行互换(不需要第三方变量)

思路:在不能使用第三方变量的情况下,可以引用异或的一个小细节:

一个数异或同一个数两次,结果还是这个数,由此可以进行互换而不使用第三方变量;

n=n^m;

m=n^m;//m=n^m^m

n=n^m;//n=n^n^m

使用第三方变量进行数值互换:

int a=3,b=8;

System.out.println("a="+a+",b="+b);

int temp;

temp=b;

b=a;

a=temp;

System.out.println("a="+a+",b="+b);

·位运算符(练习2&三元运算符)

获取一个数的十六进制的方法:

例如60;

int num=60;

//获取60的最低4位,通过&15;

int  n1=num &15=12;

System.out.println(n1>9?char(n1-10+'A'):n1);

//获取下一组四位,将60右移4位,用一个变量接收

int temp=60>>>4;

//对temp的值进行最低四位的获取;

int n2=temp&15=3;

System.out.println(n2>9?char(n1-10+'A'):n2);

出现了一个问题:十六进制里没有12,该怎么办呢?

十六进制:0-9  A    B    C    D E F

asc码:           65  66   67

                      10  11  12

12-10=2+‘A’=(char)67='C'

但是:怎么判断n1的值是否大于9呢?这里要用到三元运算符了;

 

11.三元运算符

格式:(条件表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

int x=3,y;

y=(x>1)?100:200;

System.out.println("y=")+y;

程序流程控制分为四种:

顺序结构

判断结构

选择结构

循环结构

12.判断结构

 if语句有三种格式:

1.if(条件表达式)

{

执行语句1;

}

2.if(条件表达式)

{

执行语句1;

}

else

{

执行语句2;

}

3.if(条件表达式)

{

执行语句1;

}

else if

{

执行语句;

}

  。。。

else

{

执行语句;

}

练习:

//需求1:根据用户定义的数值不同,打印对应的星期英文
 /*思路:用户定义的值不确定,可以定义一个变量

            输入1-7,输出对应的星期的英文
            可能会有用户输错的情况,这时候输出,您输入的数字无效*/
       int week=8;
       if(week==1)
       {
      System.out.println("Monday");
       }
       else if(week==2)
       {
      System.out.println("Monday2");
       }
       else if(week==3)
       {
      System.out.println("Monday3");
       }
       else if(week==4)
       {
      System.out.println("Monday4");
       }
       else if(week==5)
       {
      System.out.println("Monday5");
       }
       else if(week==6)
       {
      System.out.println("Monday6");
       }
       else if(week==7)
       {
      System.out.println("Monday7");
       }
       else
       {
      System.out.println("您输入的数字无效");
       }

//需求2:根据用于指定月份,打印该月份所属的季节
  //3,4,5春季 6,7,8夏季 9.10,11秋季 12 1 2 冬季
  /*思路:定义一个变量,用于存储指定的月份
          if变量值==3,4,5,输出春季
          夏秋冬同理;
    如果变量不在1-12之间,输出数字无效*/
    int month=13;
    if(month>=1&&month<=12)
    {
      if(month>=3&&month<=5)
      {
         System.out.println("month="+month+"对应的季节是春季");
      }
      else if(month>=6&&month<=8)
      {
         System.out.println("month="+month+"对应的季节是夏季");
      }
      else if(month>=9&&month<=11)
      {
         System.out.println("month="+month+"对应的季节是秋季");
      }
          else 
      {
         System.out.println("month="+month+"对应的季节是冬季"); 
      }
     }
      else
      {
         System.out.println("数字无效");
      }

 另一种做法:

if(x>12||x<1)

  System.out.println(x+"月份不存在");

else if(month>=3&&month<=5)
      {
         System.out.println("month="+month+"对应的季节是春季");
      }
 else if(month>=6&&month<=8)
      {
         System.out.println("month="+month+"对应的季节是夏季");
      }
   else if(month>=9&&month<=11)
      {
         System.out.println("month="+month+"对应的季节是秋季");
      }

else

  {

      System.out.println("month="+month+"对应的季节是冬季");

  }

 

 13.循环结构

switch语句

格式:

switch(表达式)

{

case 取值1:

    执行语句;

break;

case 取值2:

    执行语句;

break;

。。。。

default:

    执行语句;

break;

}

break作用是跳出switch语句;

当所有都不对的情况下,默认default;

特点:1.switch里面的表达式的值只接收四种类型 byte short int char

         2.switch当中的case是没有顺序的

         3.switch有两种结束方式;一种是break结束,另一种是大括号结束;

         需求:根据用于指定月份,打印该月份所属的季节

int x=4;

switch(x)

{

  case 3:

  case 4:

  case 5:

               System.out.println(x+"春季");

     break;

    case 6:

    case 7:

    case 8:

               System.out.println(x+"夏季");

     break;

   case 9:

     case 10:

     case 11:

               System.out.println(x+"秋季");

     break;

   case 12:

     case 1:

     case 2:

               System.out.println(x+"冬季");

     break;

   default:

                System.out.println(x+"无效");

}

switch和if的区别:

1.if除了能判断具体数值和区间,switch对于区间比较大的很不好判断;

2.if能够判断布尔值,而switch不可以;

开发时候如何选择if还是switch呢?重点

如果要对具体数值进行判断,而且数值不多,(而且符合byte、short、 int、 char这四种类型)用switch最好;

对区间判断,对结果为布尔类型判断,用if最合适;

 

 

                                                 

详细请查看:http://edu.csdn.net/heima/

posted on 2012-07-27 18:22  微笑Angle  阅读(291)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3