码迷,mamicode.com
首页 > 编程语言 > 详细

传智播客_2015年Java基础视频-深入浅出精华版 笔记(2015年9月14日23:11:11)

时间:2015-09-15 00:02:28      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:

本笔记是个人笔记+摘录笔记相结合,非完全原创

 

day01

win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面)

用DOS删除的文件不可以在回收站恢复?!!

常用DOS命令
d: 回车 盘符切换
dir(directory):列出当前目录下的文件以及文件夹
md (make directory) : 创建目录(创建文件夹)
rd (remove directory): 删除目录(删除文件夹,注意:前提是文件夹必须是空的!!)
如果想删除不是空的文件夹(比如删除aaaaa文件夹),可以用命令 rd /s aaaaa(会有删除提示)或者rd /s /q aaaaa(静默删除)
cd (change directory)改变指定目录(进入指定目录)
cd.. : 退回到上一级目录
cd\: 退回到根目录
del (delete): 删除文件,删除一堆后缀名一样的文件*.txt
exit : 退出dos命令行
cls : (clear screen)清屏

 

 第一个程序:HelloWorld案例(掌握)

 

 class HelloWorld {

 

  public static void main(String[] args) {

 

   System.out.println("HelloWorld");

 

  }

 

 }

 

 (1)程序解释:

 

  A:Java程序的最基本单位是类,所以我们要定义一个类。

 

   格式:class 类名

 

   举例:class HelloWorld

 

  B:在类中写内容的时候,用大括号括起来。

 

  C:Java程序要想执行,必须有main方法。

 

   格式:public static void main(String[] args)

 

  D:要指向那些东西呢,也用大括号括起来。

 

  E:你要做什么呢?今天我们仅仅做了一个简单的输出

 

   格式:System.out.println("HelloWorld");

 

   注意:""里面的内容是可以改动的。

 

 

 

 (2)Java程序的开发执行流程:

 

  A:编写java源程序(.java)

 

  B:通过javac命令编译生成.class文件

 

  C:通过java命令运行.class文件

 

 

 

常见的问题(掌握)

 

 (1)扩展名被隐藏

 

  如何找到:工具--文件夹选项--查看--去除隐藏扩展名的那个勾勾

 

(2)要求文件名称和类名一致。

 

  实际上不这样做也是可以的。

 

  但是,注意:

 

   javac后面跟的是文件名+扩展名

 

   java后面跟的类名不带扩展名

 

 (3)Java语言严格区分大小写,请注意。

 

   还有就是单词不要写错了。

 

 (4)见到非法字符: \65307肯定是中文问题。

 

    写程序要求标点符号必须全部是英文状态。

 

 (5)括号的配对问题。

 

  一般来说,括号都是成对出现的。

 

 (6)遇到

 

  在类 HelloWorld 中找不到主方法, 请将主方法定义为

 

  肯定是主方法的格式问题。

 

 

 

path环境变量

 

 path环境变量的作用

 

  保证javac命令可以在任意目录下运行。

 

  同理可以配置qq等

 

 

 

 

 

 

 

day2

 

1.java关键字--组成关键字的字母全部小写

 

注意:goto和const作为保留字存在,目前并不使用(在JDK的新版本中可能提升为关键字)

 

 

 

2.demo:案例,演示

 

 

 

3.Java标识符

 

可以是

 

 英文大小写字母

 

 数字字符

 

 $和_

 

 

 

 注意:

 

 A.不能以数字开头

 

 B.不能是Java中的关键字

 

 C.Java语言严格区分大小写

 

 

 

 

 

4.常见的命名规则(重点):见名知意

 

  举例:我要定义一个学生类

 

   class Student {}

 

   class S{}

 

   

 

  :其实就是文件夹,用于把相同的类名进行区分

 

   全部小写

 

  

 

   单级:liuyi

 

   多级:cn.itcast(解析:cn是一个文件夹,itcast也是一个文件夹,cn文件夹里包含有itcast文件夹)

 

    cn

 

     itcast

 

     

 

  类或者接口:

 

   一个单词:单词的首字母必须大写

 

    举例:Student,Dog

 

   多个单词:每个单词的首字母必须大写

 

    举例:HelloWorld,StudentName

 

   

 

  方法或者变量

 

   一个单词:单词的首字母小写

 

    举例:main,age

 

   多个单词:从第二个单词开始,每个单词的首字母大写

 

    举例:studentAge,showAllNames()

 

   

 

  常量:

 

   一个单词:全部大写

 

    举例:PI

 

   多个单词:每个字母都大写,用_隔开

 

    举例:STUDENT_MAX_AGE

 

 

 

 

 

5.Java中注释的分类及格式

 

  单行注释://

 

  多行注释:/星 星/

 

   注意:多行不可以嵌套使用,而单行是可以的

 

  文档注释:被javadoc工具解析生成一个说明书

 

 

 

用注释写的一个Java案例

 

===========================华丽的分割线=========================================

 

/*

 

 需求:我准备写一个java程序,把“HelloWorld”这句话输出在控制台

 

 

 

 分析:A:要写一个java程序,必须定义类

 

   B:把数据能够输出,说明我们的程序是可以独立运行的,而程序要独立运行,必须定义main方法

 

   C:把数据输出在控制台,必须使用输出语句

 

   

 

 实现:

 

   A:java语言提供了一个关键字:class用来定义类,后面跟的是类名

 

   B:main方法的格式是固定的:

 

   public static void main(String[] args) {

 

   

 

   }

 

   C:输出语句的格式是固定的:

 

   System.out.println("HelloWorld");

 

   "HelloWorld"这个内容是可以改变的

 

 

 

*/

 

 

 

//这是我的HelloWorld案例

 

class HelloWorld {

 

 /*

 

  为了程序能够独立运行,定义main方法

 

  main方法是程序的入口

 

  被jvm自动调用

 

 */

 

 public static void main(String[] args) {

 

  //为了把数据显示在控制台,我们就使用了输出语句

 

  System.out.println("HelloWorld");

 

 }

 

}

 

===========================华丽的分割线=============================================

 

 

 

 

 

6.常量:

 

  在程序执行过程中,其值不发生改变的量。

 

 分类:

 

  A:字面值常量

 

  B:自定义常量(后面讲)

 

 字面值常量

 

  A:字符串常量 用双引号括起来的内容。

 

  B:整数常量 所有的整数

 

   举例:100, 200

 

  C:小数常量 所有的小数

 

   举例:10.23,110.11

 

  D:字符常量 用单引号括起来的内容

 

   举例:‘a’,‘A’,‘0’

 

   错误的:‘ab’

 

  E:布尔常量 比较特殊

 

   举例:true,false

 

  F:空常量 后面讲

 

   举例:null

 

 

 

7.Java进制

 

 Java针对整数常量提供了4种表现形式

 

 二进制(jdk7以后有)

 

 八进制

 

 十进制

 

 十六进制

 

 

 

 

 

8.快速的进制转换法

 

 8421码,是bcd码一种。

 

 它表达的意思是每一个二进制位上的数据对应一个固定的值,

 

 只需要把对应的1位置的数据值给相加,即可得到该二进制对应的十进制的值

 

 

 

 二进制 1 1 1 1 1 1 1 1

 

 

 

 十进制 128 64 32 16 8 4 2 1

 

 

 

 

 

 例  

 

 二进制到十进制的转换

 

 1010100 = 64 + 16 + 4 = 84;

 

 

 

 十进制到二进制的转换

 

 100 = 0b1100100(对照着看,首先100<128,所以第八位为0;然后100>64,第七位为1;接着,100-64=36,36>32,所以第六位为1;然后,36-32=4,4<16,所以第五位为0;然后,4<8,第四位为0;然后,4=4,所以第三位为1;

 

 然后,0<2,第二位为0;然后0<1,第一位为0,总的来说是01100100,去掉首位的0就是1100100,再规范化表示为0b1100100)
 
 
 

9.原码反码补码
原码:
正数的原码最高位是0;
负数的原码最高位是1;
其他的是数值位。
符号位 数值位
+7 0 0000111
-7 1 0000111

反码:
正数的反码与原码相同。
负数的反码与原码是符号不变,数值位取反(0变1,1变0)

+7 0 0000111
-7 1 1111000

补码:
正数的补码与原码相同
负数的补码是在反码的基础上加1.

+7 0 0000111
-7 1 1111001

 

有符号数据表示法的练习
A:已知某数X的原码为10110100B,试求X的补码和反码。

符号位 数值位

原码: 1 0110100

反码: 1 1001011

补码: 1 1001100

B:已知某数X的补码11101110B,试求其原码。

符号位 数值位

补码: 1 1101110

反码: 1 1101101

原码: 1 0010010


10.数据类型:Java是一种强类型的语言,针对每一种数据都定义了明确的数据类型。

数据类型分类:
A:基本数据类型
B:引用数据类型(类,接口,数值)

基本数据类型:4类8种
A:整数 占用字节数
byte 1
short 2
int 4
long 8

B:浮点数
float 4
double 8

C:字符
char 2
D:布尔
boolean 1

注意:
整数默认是int类型
浮点数默认是double类型。

长整型后缀用L或者l标记。建议使用L。
例如
在Java中,
long j = 10000000000;
System.out.println(j);
编译时会报错 错误: 过大的整数: 10000000000,因为整数(这里是10000000000)默认是int类型
解决办法 long j = 10000000000L;


单精度浮点数用F或者f标记。建议使用F。
例如
在Java中,
float f = 12.345;
System.out.println(f);
编译时会报错 错误: 不兼容的类型: 从double转换到float可能会有损失
解决办法 float f = 12.345F;

11.数据类型转换
默认转换(从小到大的转换)
A:byte,short,char—int—long—float—double
B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型
举例
=================================================================
byte a = 3;

int b = 4;

byte c = a + b;//有问题

int d = a + b;//没有问题
=================================================================
上述 byte c = a + b;//有问题
如何解决?用强制类型转换


12.强制转换:
从大的数据类型到小的数据类型。

格式:
目标数据类型 变量 = (目标数据类型) (被转换的数据);

注意:
不要随意的去使用强制转换,因为它隐含了精度损失问题。
那么,
//用强制类型转换改进
byte c = (byte) (a + b);
System.out.println(c);

13.思考题:看看下面两个定义有没有区别呢?
float f1 = (float)12.345;
float f2 = 12.345f;

f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。(建议用f2的写法)

14.面试题
A面试题:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?

 


答:b = b1 + b2;是有问题的。
因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。

也就是说。b = b1 + b2; -----这个是类型提升,所有有问题。b1 + b2首先整体提升为int类型(byte,short,char相互之间不转换,他们参与运算首先转换为int类型),int类型的(b1+b2)赋值给byte类型的b,所以有损失精度的错误。

b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。也就是说,编译器把3+4看做一个常量而不是变量的加法运算。所以不报错

15.强制转换数据溢出后的结果怎么算(一个实例)

byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

//我们可以使用强制类型转换
byte b = (byte) 130;

//结果是多少呢?
System.out.println(b);

分析过程:
我们要想知道结果是什么,就应该知道是如何进行计算的。
而我们又知道计算机中数据的运算都是补码进行的。
而要得到补码,首先要计算出数据的二进制。

A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
C:已知补码求原码。(注意不要漏掉这一步,因为内存中操作的是补码,而我们看到的是补码,所以还要转换成原码)
符号位 数值位
补码: 1 0000010

反码: 1 0000001

原码: 1 1111110
16.
//直接输出一个字符
System.out.println(‘a‘); //输出a
//输出一个字符和一个整数做加法
System.out.println(‘a‘+1); //输出98

ASCII码表。
记住三个值:
‘a‘ 97
‘A‘ 65
‘0‘ 48注意

17.字符串参与运算
System.out.println("hello"+‘a‘+1); //输出helloa1,hello优先与‘a’结合
System.out.println(‘a‘+1+"hello"); //输出98hello,‘a’优先与1结合,形成98再与hello结合

System.out.println("5+5="+5+5); //输出5+5=55,字符串与数字5先结合
System.out.println(5+5+"=5+5"); //输出10=5+5,5+5优先形成10,再与字符串结合

 

 

补:‘a’+1有类型提升???!

 

 

 

day3

 

1.在定义Long或者Float类型变量的时候,要加L或者f。

 

  整数默认是int类型,浮点数默认是double。

 

 

 

  byte,short在定义的时候,他们接收的其实是一个int类型的值。

 

  这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。

 

  float表示的数据范围比long的范围要大

 

  long:2^63-1

 

  float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

 

 

 

2.面试题:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?

 

 可以。因为java语言中的字符占用两个字节。(Java中char占两个字节,C语言中char占一个字节)

 

 

 

 Java语言采用的是Unicode编码。

 

3.

 

 A:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型

 

 B:/获取的是除法操作的商,%获取的是除法操作的余数

 

=========================================================================

 

 System.out.println(x/y); //整数相除只能得到整数

 

 

 

  //我就想得到小数,该肿么办呢?

 

  //只需要把操作的数据中任意的一个数据变为浮点数

 

  System.out.println(x*1.0/y);

 

 

 

  //%的应用

 

  System.out.println(x%y); //得到的是余数

 

==========================================================================

 

4.++,--运算符的使用

 

//参与运算使用

 

   int a = 3;

 

   int b = 4;

 

   

 

   int c = a++;

 

   int d = b--;

 

   

 

   System.out.println("a:"+a); //输出为4

 

   System.out.println("b:"+b); //输出为3

 

   System.out.println("c:"+c); //输出为3

 

   System.out.println("d:"+d); //输出为4

 

 

 

5.一个面试题
面试题:
short s=1;s = s+1;

short s=1;s+=1;
上面两个代码有没有问题,如果有,那里有问题。
class OperatorTest {
public static void main(String[] args) {
//short s = 1;
//s = s + 1;
//System.out.println(s);

short s = 1;
s += 1; //好像是 s = s + 1;
System.out.println(s);
}
}

为什么第二个木有问题呢?
扩展的赋值运算符其实隐含了一个强制类型转换。

s += 1;
不是等价于 s = s + 1;
而是等价于 s = (s的数据类型)(s + 1);
(个人理解)也就是说,s = s + 1中的s + 1包含了加法运算,short类型出现了提升(提升为int类型)
而s+=1本身隐含了强制的类型转换


6.逻辑运算符:
&,|,^,!
&&,||

特点:
逻辑运算符一般用于连接boolean类型的表达式或者值。

表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
比较表达式:a == b

结论:
&逻辑与:有false则false。
|逻辑或:有true则true。
^逻辑异或:相同为false,不同为true。
举例:情侣关系。男男,男女,女男,女女
!逻辑非:非false则true,非true则false。
特点:偶数个不改变本身。

例如
int a = 3;
int b = 4;
int c = 5;

//&逻辑与
System.out.println((a > b) & (a > c)); //false & false = false
System.out.println((a > b) & (a < c)); //false & true = false
System.out.println((a < b) & (a > c)); //true & false = false
System.out.println((a < b) & (a < c)); //true & true = true

7.Java中&&与&

&&和&的区别? 同理||和|的区别?
A:最终结果一样。
B:&&具有短路效果。左边是false,右边不执行。

开发中常用的逻辑运算符:
&&,||,!
示例

//boolean b1 = ((x++ == 3) & (y++ == 4));
//boolean b1 = ((x++ == 3) && (y++ == 4));
//boolean b1 = ((++x == 3) & (y++ == 4));
boolean b1 = ((++x == 3) && (y++ == 4));
System.out.println("x:"+x);
System.out.println("y:"+y);
System.out.println(b1);

 

 

8.位运算符:
&,|,^,~
<<,>>,>>>

注意:
要做位运算,首先要把数据转换为二进制。
例子

 

int a = 3;
int b = 4;

System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);
System.out.println(~3);

 

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11
00000000 00000000 00000000 00000011
4的二进制:100
00000000 00000000 00000000 00000100

&位与运算:有0则0。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000000
结果是:0

|位或运算:有1则1。
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7

^位异或运算:相同则0,不同则1。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7

~按位取反运算符:0变1,1变0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100 (补码)

补码:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
结果是:-4

 

9.^的特点:一个数据位异或两次,该数本身不变。(^指的是异或运算符)
例如
int a = 10;
int b = 20;

System.out.println(a ^ b ^ b);//10
System.out.println(a ^ b ^ a);//20
10.一道面试题:
请自己实现两个整数变量的交换(默认int类型.)
例如
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);

 

 

 

 

 


方式1:使用第三方变量(开发中用的)
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");

方式2:用位异或实现(面试用)
左边:a,b,a
右边:a ^ b

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

方式3:用变量相加的做法

a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);

方式4:一句话搞定
b = (a+b) - (a=b); //b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);

11.<<:左移 左边最高位丢弃,右边补齐0
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0

 

 

 

//<< 把<<左边的数据乘以2的移动次幂
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;

//>> 把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);

System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);

 


分析
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100

>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码

补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110

结果:-6

>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)

结果:
update 2015年9月9日00:23:42

 

12.&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

 

Day 4
1.switch:表示这是switch选择结构
表达式:这个地方的取值是有限定的
byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串

 

面试题
byte可以作为switch的表达式吗?
long可以作为switch的表达式吗?
String可以作为switch的表达式吗?

 

答:byte可以,long不可以,String在jdk7后可以

 

2.switch要注意break问题
例如

 

int a = 2;
int b = 3;
switch(a)
{
default:
b++;
case 3:
b++;
case 4:
b++;
}
switch语句只在遇到break才能停止,否则会一直执行下去

3.if语句和switch语句的区别?
if语句:
A:针对结果是boolean类型的判断
B:针对一个范围的判断
C:针对几个常量值的判断

switch语句:
针对几个常量值的判断

 

 

 

传智播客_2015年Java基础视频-深入浅出精华版 笔记(2015年9月14日23:11:11)

标签:

原文地址:http://www.cnblogs.com/huangtao1996/p/4770709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!