专栏首页upuptop的专栏【趣学程序】java基础知识(一)

【趣学程序】java基础知识(一)

Java中的标识符

可以简单的理解为Java程序为了加强阅读行自定义的名称,如类名、方法名、变量名。仅仅是个名字而已。对于这样一个名字不像我们人类一样可以随意起名,程序有一定的命名规则。

命名(起名)规则:    (1) 由字母、数字、下划线、$组成,不能以数字开头        注意:此处的字母还可以是中文,日文等,不建议使用中文;    (2) 大小写敏感(class A  和 class a 是两个类)    (3) 不得使用java中的关键字和保留字    (4) 建议不使用Java API中已存在类名作为自己的类名。
建议java程序中使用驼峰命名规则:    (1)类名首字母大写。(例:class Dog     class HelloWorld)    (2)方法名/变量名第一个单词全小写,其他单词首字母大写。        (例:int index = 0;  int fristIndex = 0;void getState(){})    (3)常量名称单词全部大写,单词之间用下划线分割。
        (例:final int SUCCESS_CODE = 200;)

java中的常量和变量

变量的概念: 
   (1)占据着内存中的某一个存储区域;  
   (2)该区域有自己的名称(变量名)和类型(数据类型); 
   (3)该区域的数据可以在同一类型范围内不断变化;

为什么要定义变量

用来不断的存放同一类型的常量,并可以重复使用; 使用变量注意: 变量的作用范围, 初始化值

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

java中的8大基本数据类型:

整数型:    byte -> short -> int -> long 
整数型是一类代表整数值的类型。当需要代表一个整数的值时,可以根据需要从4 种类型中挑选合适的,如果没有特殊要求的话,一般选择int 类型。
按照上面的书写顺序,从左至右所表示的范围逐渐增大。
各个类型使用方式:    byte b = 10;    short s = 20;    int i = 100;    long l = 1000L;
浮点型(小数):    float -> double
java默认浮点型为double,如需定义float类型的变量,后缀必须加 F 或者 f, 建议使用 F小数型是一类代表小数值的类型。当需要代表一个小数的值时,可以根据需要从以上2 种类型中挑选合适的。如果没有特殊要求,一般选择double类型。
各个类型使用方式:        float f = 0.5F;    double d = 1.5;
字符型(单个字符):    char
    char c = 'a';    char c = '。';
布尔型:    boolean
注意:布尔型变量只有两个值:true(正确),false(错误),经常用于条件判断
    boolean flag1 = true;    boolean flag2 = false;

注:

  • 格式是固定的,记住格式,以不变应万变。
  • 作用范围:定义开始到定义它的代码块结束;
  • 同一范围内,不允许多个个局部变量命名冲突

附录(各种类型所占字节数)

整数型

浮点类型

字符型

boolean类型

基本数据类型转换之向上转型和向下转换

向上转换(隐式类型转换):
    整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:    容量小的类型可自动转换为容量大的数据类型;
        byte,short,char → int → long → float → double        byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。        boolean 类型是不可以转换为其他基本数据类型。        Eg:        int i = 123;        long l = i; //自动转换,不需强转        float f = 3.14F;        double d = f;
向下转换(显式类型转换/强制类型转换):
    整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:    容量小的类型可自动转换为容量大的数据类型;        byte,short,char → int → long → float → double        byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。        boolean 类型是不可以转换为其他基本数据类型。        Eg:        long l = 123L;        int i = (int) l;//必须强转        double d = 3.14;        float f = (float) d;

面试踩坑

byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。
//下列程序的执行结果是什么public class DataTypeDemo {    public static void main(String[] args) {
        byte a = 1;        byte b = 1;
        byte c = a + b;    }}
答案:编译时期异常报错
应将程序修改为:int c = a + b; 或者  byte c = (byte)(a+b);

Java成员变量和局部变量

局部变量

  • 声明在方法体中的变量;
  • 局部变量使用前必须初始化值;
  • 局部变量没有默认初始化值;
  • 局部变量的作用域是从定义开始到定义它的代码块结束;

成员变量

  • 在方法体外,类体内声明的变量,又称字段(Field)或全局变量;(其实Java中没有全局变量,由于Java是面向对象语言,所有变量都是类成员)
  • 作用域是整个类中;
public class Demo2 {
 public static void main(String[] args) {  
       int i;//局部变量没有赋初始值,编译时期就会报错 
             System.out.println(i);  
  }
}
public class Demo2 { 
 static int i;//这里是成员变量,程序会默认给初始值,所以程序不会报错 
    public static void main(String[] args) { 
        System.out.println(i);  
     }
}

Java的运算符

运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种:

算术运算符(+ 、— 、* 、/ 、%)

    int addRes = a + b;//结果:12    int dRes = a - b;//结果:8    int cRes = a * b;//结果:20    int ddRes = a / b;//结果:5    int aaRes = a % b;//结果:0    int resubb = 10 % 3;//结果:1

    %  是取模运算,即求余数运算。10 % 3 (10 对 3 取模)结果为1

赋值运算符(= 、+=、-=、*=、/=,、%=)

    int c = 100;    int d = 200;
    c += d;//该等式等价于 c = c + d;    //输出300    System.out.println(c);
    c -= d;//该等式等价于 c = c - d;    //输出100    System.out.println(c);
    c *= d;//该等式等价于 c = c * d;    //输出 20000    System.out.println(c);
    c /= d;//该等式等价于 c = c / d;    //100    System.out.println(c);
    c %= d;//该等式等价于 c = c % d;    //100    System.out.println(c);

面试题坑

//考点:赋值运算符,默认进行了强制类型转换
// 题目:下面的程序有问题吗?byte a  = 10;byte b = 10;
a  = a + b;a += b;

// 答案:a = a + b;  a + b 在计算的时候会转为int类型进行计算,所以编译报错:a = (byte)(a + b);a += b; 赋值运算符,默认进行了强制类型转换

关系运算符(>、>=、<、<=、!=)

        int e = 10;        int f = 20;
        // 结果false        System.out.println(e > f);// e 大于    f  是真的吗        // 结果false        System.out.println(e >= f);// e 大于等于    f  是真的吗        //结果true        System.out.println(e < f);// e 小于    f  是真的吗        //结果true        System.out.println(e <= f);// e 小于等于     f  是真的吗        //结果true        System.out.println(e != f);// e 不等于 f  是真的吗

条件运算符(&&、||、!、&、|、^)

        int h = 10;        int i = 20;
        //结果false        //从左往右运算 (h>i)是真的吗?结果是false  遇到&& 直接返回false不会走右边的表达式,形成短路        System.out.println((h > i) && (h != 10));        //结果false        //从左往右运算 (h<i)是真的吗?结果是true 遇到&&="" 判断右侧表达式,右侧表达式为true则返回true,false则返回false<="" span="">        System.out.println((h < i) && (h != 10));        //从左往右运算 (h>i)是真的吗?结果是false  遇到 || 判断右侧表达式是否为真,如果是真的返回true,false 则返回false        //结果true        System.out.println((h > i) || (h == 10));        //从左往右运算 (h<i)是真的吗?结果是true 遇到="" ||="" 直接返回true="" 不会运行右边的表达式="" 形成短路<="" span="">        //结果true        System.out.println((h < i) || (h != 10));
        //结果false        //从左往右运算 (h>i)是真的吗?结果是false  遇到 & 返回false,但是执行右侧表达式        System.out.println((h > i) & (h != 10));        //结果false        //从左往右运算 (h<i)是真的吗?结果是true 遇到&="" 判断右侧表达式,右侧表达式为true则返回true,false则返回false<="" span="">        System.out.println((h < i) & (h != 10));        //从左往右运算 (h>i)是真的吗?结果是false  遇到 | 判断右侧表达式是否为真,如果是真的返回true,false 则返回false        //结果true        System.out.println((h > i) | (h == 10));        //从左往右运算 (h<i)是真的吗?结果是true 遇到="" |="" 直接返回true="" 不会运行右边的表达式<="" span="">        //结果true        System.out.println((h < i) | (h != 10));
        //结果 true  ! 是非运算符  如果表达式结果为true,前面加上 ! 将取反。原本为true,结果为false。反之        System.out.println(!(h != 10));
        // ^ 异或运算  结论:一个数对一个数异或两次还等于原数        //10        System.out.println(h ^ i ^ i);        //true        System.out.println((h ^ i ^ i) == h);

总结

  • &&:左右两边条件,一个为false结果为false,二者都为true则结果为true,如果左边表达式为false,右侧表达式不执行,短路
  • &:左右两边条件,一个为false结果为false,二者都为true则结果为true,如果左边表达式为false,右侧表达式执行
  • ||:左右两条件,一个为true结果为true,二者都为false则结果为false,如果左边表达式为true,右侧表达式不执行,短路
  • |:左右两条件,一个为true结果为true,二者都为false则结果为false,如果左边表达式为true,右侧表达式执行
  • ^ 异或运算 一个数对一个数异或两次还等于原数

面试题

通过异或运算交换两个变量的值(不使用第三方变量交换两个数的值)

int a = 10;int b = 20;
//要求输出结果为;a = 20; b = 10;
a = a ^ b;b = a ^ b;a = a ^ b;
/*解释:a = a ^ b;b = (a ^ b) ^ b;上一步已经让 b = a;
a = (a ^ b) ^ a;
最终将 a = b;

*/

位运算符(&、|、^、~、>>、<<、<<<、>>>)

    &:与运算    |:或运算    ^:异或运算    `:取反运算    >>:右移    <<:左移    <<<:无符号左移    >>>:无符号右移


    暂略,与二进制有关。

本文分享自微信公众号 - 趣学程序(quxuechengxu),作者:upuptop

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【趣学程序】java常用类(二)

    Math类的声明: publicfinalclassMathextendsObjectMath类是与数学计算有关的类,里面的方法都是静态方法,直接使用类名来调用...

    趣学程序-shaofeer
  • 【趣学程序】java中的方法

    趣学程序-shaofeer
  • Java 代码优化之细节是魔鬼

    原文链接 https://www.cnblogs.com/xrq730/p/4865416.html

    趣学程序-shaofeer
  • Java基础-03(01).总结运算符、键盘录入、if语句

    ? 1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区...

    奋斗蒙
  • HDU 4496 D-City(反向并查集)

           题意是有n个点,m条边,刚开始这些边都是连着的,然后按顺序逐一破坏这些边,然后让你输出每破坏一次图中还剩几个集合,刚开始肯定是有一个集合的,最后都...

    Ch_Zaqdt
  • 【Sichuan 2017D】Dynamic Graph

    300个点的无环图,开始都是白色,每次改变某个节点的颜色(黑/白),问有多少对白点之间存在只有白点的路径。

    饶文津
  • 为什么使用Spring的AOP?通过日志分析

    瑞新
  • BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1689  So...

    Angel_Kitty
  • 这绝对是C语言的一个经典例题了!

    意图很明显,要用swap函数中交换main函数中的a和b的值,但是很明显上述代码是达不到要求的,a和b的值没有发生改变。其实本题就是C中比较有名传址和传值的典型...

    7089bAt@PowerLi
  • 算法训练 矩阵乘法

    问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200...

    AI那点小事

扫码关注云+社区

领取腾讯云代金券