JAVA学习记录day1

今天正式开始学习JAVA,从b站的黑马程序员的基础视频开始。Java/安卓开发入门基础视频
  主要学习了JAVA的发展历史和基本特点、基本的数据类型、运算符和程序结构。
  JAVA的口号是Write once, run anywhere。即一次编译,到处运行。这个是JAVA跨平台性的体现,这个也是JAVA在发布后迅速发展的一个重要原因。JAVA实现这特点的方法是利用JVM虚拟机。在各个平台上安装JVM虚拟机,源代码在虚拟机上编译运行,这样就能让不同平台都能运行JAVA程序。然而只能说JAVA是跨平台的,JVM是不跨平台的,对于不同的平台有不同的JVM虚拟机与其对应。JVM虚拟机包含在JRE(Java Runtime Enviroment)中,倘若不需要进行JAVA程序的开发,仅仅是对JAVA程序的运行,只需要安装JRE,而JDK(Java Development Kit )则集成了JAVA开发的工具,包括javac.exe(java编译程序),java.exe(java 运行程序),jar.exe(java打包程序)等,这些工具存放在JDK的bin目录下。在进行环境变量的配置时要将javac.exe 和java.exe的路径存放Path中。
  在学习JAVA之前,有学习过C语言,所以对于数据类型等具体的知识点不做详细描述。仅描述二者不同的地方。
  对于二者的代码书写的风格上,主要在于大括号是否换行。这个问题分分钟引发程序员间的战争。但总体来说,JAVA约定俗成的是大括号跟在后面,不换行。而C语言则一半将大括号写在下一行。对于类,包,方法,变量的命名规则大体一致,但对于命名的规范主要是大家约定俗成的,并没强制的要求。比较流行的为驼峰命名,如GetName,getPoint等。
  是在变量的赋值方面中,JAVA对于变量的赋值有常量优化机制,即自动判断常量是否在赋给的变量的范围内,在可能发生精度损失的时候编译不通过。特别的,由于这个机制,JAVA在给float型赋值时需在常量后面加f。将大于int型范围的数值赋给long型时要在常量后面加L。

float f = 1.23f;
long L = 8888888888888888L;

对此机制的相关例子如下

byte a = 200;

java在编译时会报错,可能损失精度。这是因为byte 长度是一个字节,只能存放-128~127的整型数据,在编译时便不能通过。而在C语言中,这样赋值不会再编译中出错。eg:

//在C语言中
short a = 32769 

C语言中编译不会报错,但输出的是-32767。 
JAVA的整型默认为int型,浮点型默认为double型。在两个整型常量中,倘若有一个常量的精度低于int型,会自动提升为int型,称为隐式转换,转化后的常量若在所赋给的变量的范围内,是没有问题的,但倘若是两个高精度的变量进行运算再赋给低精度的变量,会报错可能损失精度。因为编译器无法判断两个变量进行运算是否会超出所赋变量的范围。

    byte a = 3;
     int  b = 4;
    byte c = a + b; 

这是无法编译通过的。一方面,byte型的a与int 型的b 相加,会自动提升为int型,相加的结果也为int型,但在编译时,a和b两个变量运算结果的大小无确定,因此不能赋给byte型的c。
总的来说JAVA在两个操作数进行运算时会将两个精度低于int的整型或低于double浮点型的操作数进行隐式转换,倘若结果是常量,且在所赋给的变量的范围内,则不会报错,若无法判断是否超出所赋给变量的取值范围或者确定已超出则会报错。
关于类型转换的练习代码如下

class Demo_Conversion {
    public static void main(String[] args) {
        byte b1=3;
        byte b2=4;
        //byte b3=b1+b2;            //报错:可能会损失精度
        /*
        原因两方面:1、b1和b2相加是会自动提升为int型
                    2、由于b1和b2是变量,无法判断大小是否超出byte的范围,故可能损失精度
        */
        byte b3 = 3 + 4;   //在java中有常量优化机制,自动判断常量是否超出变量的范围,隐式转换
        System.out.println(b3);
        float f=12.3f;
        long l=(long)f;     //强制转换
        System.out.println(l);
        System.out.println("5 + 5 = " +5 + 5 );
        System.out.println("5 + 5 = "+(5 + 5));//字符串+任何类型组成新的字符串
        System.out.println('a'+1+"hello");//优先级从左到右

        char c=97;
        System.out.println(c);
        //char c1=-98;  //编译不通过,0--65535则可以
        char c1=2,c2=3,c3=4,c4=5;
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);

        byte b4=1;
        b4++;
        //b4 = b4 + 1;  //报错
        System.out.println(b4);
    }
}

其次是JAVA的输入与输出与C语言的不同。
java的输入需要引入包,创建键盘输入对象,而C语言只需在头不声明头文件即可
C语言:

#include <stdio.h>
void main()
{
    int a;
    printf("please enter a number:");
    scanf("%d",&a);
    printf("\nthe number is :%d",a);
}

JAVA

import java.util.Scanner;                    //引入包
class Demo_Scanner {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); //创建键盘录入对象
        System.out.println("请输入一个整数");
        int x = sc.nextInt();                //将键盘录入对象存储在x中
        System.out.println(x);
    }
}

JAVA的输出有println和print两个,用法大致相同,只不过println在输出是自动换行。但与C语言的输出有很大的不同。

System.out.println("5 + 5 = " +5 + 5 );//输出结果为5+5=55
System.out.println("5 + 5 = "+(5 + 5));//字符串+任何类型组成新的字符串,结果为5+5=10
System.out.println('a'+1+"hello");//优先级从左到右,结果为98hello

相关用法及ACS码的相关知识暂不做详细描述。
在运算符中,算数运算符+ - * / 位运算<< >> ^ ~ 及逻辑运算符& | !没有什么太大的不同。JAVA多了&& 和||,这两个是“短路逻辑运算”,&&在碰到false后不再执行后面的运算,||再碰到true后不再进行后面的运算。
另外值得注意的是两个技巧

  • 通过^运算再不申请新的变量的情况下对两个变量的数值进行交换
  • a<<k可以表示a乘以2的k次幂,a>>k可以表示a除以2的k次幂
class Demo_Operactor{
    public static void main(String[] args) {
        int a=3,b=4;
        System.out.println(a++ == 4 && ++b == 5 );  //false
        System.out.println(a);                      //4
        System.out.println(b);                      //4  短路与&&遇到false不再执行右边
        System.out.println(a++ == 4 || ++b == 5);
        System.out.println(a);
        System.out.println(b);                      //同理 短路或||遇到true不再执行右边
        
        //位运算 ~ & | ^(相同为0不同为1)
        //对一个数进行两次位异或运算还是其本身
        System.out.println(6 ^ 10 ^ 10);        //6
        System.out.println(6 ^ 10 ^ 6);         //10
        //不用第三变量,交换两个变量的值
        int x=5,y=10;
        //方法一
        x = x + y;
        y = x - y;
        x = x - y;
        System.out.println(x);      //10
        System.out.println(y);      //5
        //方法二
        x = x ^ y;
        y = x ^ y;
        x = x ^ y;
        System.out.println(x);      //5
        System.out.println(y);      //10
        //<<左移即乘以2的几次幂  >>右移即除以2的几次幂
        System.out.println(3 << 2); //12
        System.out.println(3 >> 2); //0
    }
}

最后是程序的顺序结构和选择结构,二者也没用太大的区别。在switch的使用中最应该注意的是break。switch只有在遇到break或者大括号时才停止,在编写程序时常常漏写break,会造成case穿透的现象。但有时这也是一个值得利用的地方,可以减少我们的代码量。

import java.util.Scanner;
class Demo_Switch {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个月份");
        int x = sc.nextInt();
        switch (x){                         //switch的case穿透,只有遇到break或者大括号才结束
        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("没有对应的季节");
        }
        int  y = sc.nextInt();
        switch (y){
        default :
            y++;
            System.out.println(y);
        case 1:
            y++;
            System.out.println(y);
        break;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,839评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,125评论 0 41
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 371评论 0 0
  • 看完这一章节后,我有点迷惑啦,好像不能肯定自己是谁啦。 我是谁?我自己判断自己是一个努力,善良,算是自信的...
    沱沱河rf阅读 462评论 0 3