Day1—概述、变量与运算符

java概述

1、java的三大特点

面向对象:
主要体现在两个基本概念:类、对象
以及三大特性:封装、继承、多态

健壮性:
吸收C/C++的优点,去掉了影响程序健壮性的部分(比如指针、内存申请以及释放等等)

跨平台性:
依赖于java虚拟机(JVM),可以在任何操作系统上运行java程序

跨平台性

2、java的两种核心机制

java虚拟机(即jvm)
对于不同的操作系统,有不同的虚拟机,只有提供了对应操作系统的虚拟机,才可以在此基础上运行java程序。
jvm有效的屏蔽了因不同操作系统所造成的底层平台的差别,使得编译后的java程序可以在任意平台上运行。

运行机制

垃圾收集机制:
在 C 语言中,由于它是一门底层的编程语言,没有自动的垃圾回收机制,需要开发者手动进行内存管理。这也使得 C 语言程序更加高效,但同时也更容易出现内存泄漏、使用已经被释放的内存等问题。
java取消了开发者回收无用空间内存的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
【注:即便是这样,某些java程序依然存在着内存泄漏和内存溢出的问题。】

3、java环境搭建

明确jdk、jre、jvm之间的关系
java开发工具包(jdk):提供给开发人员使用的java开发工具,该开发工具自带jre部分,同时也包含了编译工具(javac.exe)、打包工具(jar.exe)等其它工具;
java运行环境(jre):包含了jvm和java程序运行所需要的核心库等等,如果只是想运行java程序,只需要安装jre即可;
java虚拟机(jvm)

以下是它们之间的包含关系:


java环境搭建

4、java语言中的注释

单行注释:

System.out.println("Hello World!") ;  // 单行注释

多行注释:

System.out.println("Hello World!") ;  
/* 
      多行注释
*/

文档注释:

/**
      @author  指定java程序作者
      @version   指定java程序版本
*/

该注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。

变量

1、标识符与变量

标识符:
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符(凡是需要自己起名字的地方都叫标识符)

语法规则:

  • 由26个英文字母大小写,0-9 ,_或$ 组成
  • 数字不可以开头。
  • 不可以使用关键字和保留字,但能包含关键字和保留字。
  • Java中严格区分大小写,长度无限制。
  • 标识符不能包含空格。

变量的声明与赋值:

int a;    // 声明变量,只有声明后才能使用;
a = 10;    //给变量赋值;
int b = 20;    // 声明、赋值同时进行;

成员变量与局部变量:
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。

2、基本数据类型

整型:byte、short、int、long
java中整型常量默认为int型,如需声明long型常量,应该在后面加上‘l’或‘L’;
java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。

整型

浮点型:float、double
java中的浮点型默认为double型,其精度为float的两倍,如需要声明float类型,需要在后面加上‘f’或‘F’。

浮点型

字符型:char
char型用来表示通常意义上的字符,占用2个字节;
java中的所有字符都是用Unicode编码,因此char类型是可以进行运算的:

char c1 = ' a ';
char c2 = ' 中 ';
char c3 = ' 9 ';
System.out.println(10 + c2);   // 20023
char类型运算

此外,char类型还可用于转义字符:

char c = ' \n ' ;   // ' \n ' 表示换行符 

其它常见的转义字符如下:


常见的转义字符

Unicode编码与UTF-8:
Unicode编码能够将世界上的所有符号都纳入其中,并且对每一个符号都给予一个独一无二的编码,使用Unicode编码不会造成乱码问题;
但是Unicode编码只是规定了一个符号的二进制编码,没有规定这个符号该如何进行存储。比如ASCII(用一个字节进行存储的编码方式)与Unicode无法进行区分,因为计算机不知道三个字节究竟是表示一个字符还是三个字符;再者,英文字母一般情况下仅用一个字节表示都足够了,如果强行规定用Unicode进行编码,每个字符都会占用3-4个字节,那么剩下的字节都是0,这对存储空间来说是巨大的浪费;
为了解决这个问题,UTF-8是互联网上最广泛使用的一种Unicode的实现方式,它是一种变长的编码方式,可以使用1-6个字节表示一个符号,并且通过其独特的编码规则,根据不同的符号而变化字节的长度。

布尔型:boolean
boolean类型只有两个值:true或者false,没有null这个值;
【注:不可以使用0或非 0 的整数替代false和true,这点和C语言不同】
【但是Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。】

3、基本数据类型转换

自动类型转换:容量小的类型会自动转换为容量大的类型;

基本数据类型转换

强制类型转换:将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意;

int number1 = 10;
short num = (short)number1;
System.out.println("num = " + num);     //  num = 10
  • byte、short、char之间不会相互计算,他们在进行计算时会统一转换为int型;
  • boolean类型不参与其它数据类型之间的运算。

4、引用数据类型

引用数据类型

5、字符串

String类不是基本数据类型,而是属于引用数据类型;
一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。

int no = 10;
String str = "abcdef";
String str1 = str + "xyz" + no;   // string1 = "abcdefxyz10"

str1 = str1 + "123";   // string1 = "abcdefxyz10123"
char c = 'A';

double pi = 3.1416;
str1 = str1 + pi;   // string1 = "abcdefxyz101233.1416"
boolean b = false;
str1 = str1 + b;   // string1 = "abcdefxyz101233.1416false"
str1 = str1 + c;   // string1 = "abcdefxyz101233.1416falseA"

运算符

1、二进制

二进制整数的三种形式:
原码:直接将一个数值换成二进制数。最高位是符号位;
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1;
负数的补码:其反码加1;

计算机底层是以二进制补码的形式保存所有的整数,且正数的原码、反码、补码都相同,通过带入符号位进行计算,计算机只有加法而没有减法:


计算机的运算设计
三种形式

2、算数运算符

算数运算符

注意事项:
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。

对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

int x = 3510;
x = x / 1000 * 1000;     // x = 3000;
System.out.println(x);
System.out.println("5 + 5 =" + 5 + 5);

a++与++a的区别主要在于:前者的自加运算发生在使用a值之后,后者的自加运算发生在使用a值之前;

int i1 = 10;
int i2 = 20;

int i = i1++;
System.out.print("i="+i);    // i=10
System.out.println("i1="+i1);    // i1=11

i = ++i1;
System.out.print("i="+i);    // i=12
System.out.println("i1="+i1);     // i1=12

i = i2--;
System.out.print("i="+i);     // i=20
System.out.println("i2="+i2);     // i2=19

i = --i2;
System.out.print("i="+i);     //  i=18
System.out.println("i2="+i2);     // i2=18

3、扩展赋值运算符

+=,-=,*=,/=,%= 这些符号自带强转的功能;

short s = 3;
s = (short)(s+2);
System.out.println(s);      // 5
int i = 1;
i *= 0.1;              // 等价于 (int)i = i * 0.1;
System.out.println(i);        // 0
i++;
System.out.println(i);        // 1
int m = 2;
int n = 3;
n *= m++;        // 等价于(int) n = n * m++;
System.out.println("m=" + m);       // m = 3
System.out.println("n=" + n);        // n = 6
int j = 10;
j += (j++) + (++j);         // 等价于 (int)j = j + (j++) + (++j);
System.out.println(j);        // 32

4、比较运算符

比较运算符的结果都是boolean类型,要么是true,要么是false


比较运算符

5、逻辑运算符

逻辑运算符

短路与&&和短路或||
&&:如果左边为真,那么右边参与运算;如果左边为假,那么右边不参与运算;
||:如果左边为假,那么右边参与运算;如果左边为真,那么右边不参与运算;

int x = 1;
int y = 1;
if(x++==1 || ++y==1){          // 左边条件为真,右边不参与运算;
    x =7;
}
System.out.println("x="+x+",y="+y);    //x=7 ;y=1
boolean x=true;
boolean y=false;
short z=42;
if((z++==42)&&(y=true))z++;      //  左边为真,右边参与运算
if((x=false) || (++z==45)) z++;    //  左边为假,右边参与运算
        
System.out.println("z="+z);       //  z = 46

6、三元运算符

利用三元运算符获取三个数之中最大数:

int x = 8;
int y = 13;
int z = 5;
int temp = (x>y)?x:y;
int res = (temp>z)?temp:z;
System.out.println("res="+res);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容