首页 > 代码库 > Java学习笔记(2)
Java学习笔记(2)
有不足之处,请大家指出
一、 基础知识
1、SDK的最新下载
搜索oracle,进入网站,à Downloads –> JavaSEI à 选第一个下载(其实java 8u111和8u112的区别就是在8u111的基础上优化了一下,升了下级,实际使用没什么区别的)
其次注意一下选32位还是64位,是Liunx系统还是Windows系统,其中X86指的是32位
最后:在图中选中第一个按钮同意,如果不选默认是第二个不同意
显示的一般都是最新的版本,如果要下载旧版本通过搜索可以找到
2、PATH的目的
Java的环境变量有path环境变量和classpath环境变量。在编译的过程中,我们无法同时运行JDK(Java的开发工具:java development kit)和你在记事本编写好的java程序,所以设置path的环境变量实际就是安装JDK的路径,这样,你在运行的时候就可以直接输入你编程的程序路径就好了,而不用输入JDK的路径
3、初学要注意的几点:
1.在记事本编写完程序后忘了保存
2.写完保存好代码后,在cmd运行时输入路径要输入正确的路径
3.编译字节码文件:javac 文件名 回车
4.运行代码: java 类名 注意这儿不是文件名
5.写固定语句出错,尤其是写main函数写错的时候,运行时并不会报错,因为那个还是函数,只是变成了普通函数了,一定要注意的一点
Java的源文件扩展名是.java, 字节码文件扩展名是.class
对于初学者,多练、多问、自己主动去调试、复习和总结是自我感觉最好的学习方法
4、关键字和标识符
1、Java中的关键字是用来一些特殊用途的词,在Java中关键字严格区分大小写
2、标识符是用来在程序中定义变量、类、方法等的命名符号
5、变量
<1、命名:使用驼峰命名法,第一个单词的首字母大写,其它的首字母小写。而且变量名要见名知意。
<2、使用:
可以先声明一个或多个变量,再赋值;
也可以在声明一个变量的时候直接赋值
如:
int a1,a2,a3,a4;
a1 = 10;
int a= 10;
char c = ‘a‘;
short s= 10
注意:要先声明后使用,先赋值才能输出
6、Java的数据类型
<1、基本数据类型:常见的用int、char、boolean、byte等类型,存的是本身
<2、引用数据类型:String、class、数组等,存的是数据的空间地址
<3、数据类型转换中需要注意的点:
凡是short ,byte ,char 定义的变量,在做运算的时候数据类型都会自动转换为int
两个不同数据类型做运算,给过取决于大的数据类型。
<4、自动类型转换
目标类型和源文件类型要兼容 如int型就不能兼容char型和字符串型
如:
short s= 100;
int i = s; // 自动类型转换
int num1 = 10;
float num2 =10.0f;//默认是double ,float就在数据后面加f
小数据转换成大数据:目标类型要大于源类型 如int类型可以转换成double类型,但是反过来就会出错
<5、强制转换类型
大数据转换成小数据:就像上述讲的,自动类型转换不能讲int类型转换成double类型,可以通过强制转换,但是建议少用,因为可能会造成数据丢失。
long l = 100000L; // 长整型的需要在后面加一个L
int a = (int)l; // 强制类型转换 ,也是通过变量前面用小
6、进制的转换
整数常量的表现形 à进制的形式表示(二进制、八进制、十进制、十六进制)
1、进制的认识
在生活中:还有其他的进制,如星期(七进制 0-6)、时间(十二进制 (0-11))、二十四进制(0-23)
计算机使用二进制来读取生活中的数据,计算机只能识别0和1,就像开关一样只有两种方式
2、进制之间的转换:
十进制转换成二进制:将这个数除于2取余,直到商为0,将余数从下至尚连接起来就是二进制的数
二进制转换成十进制:从左至右将二进制的每一位乘以2 ^(n-1),然后相加,就是十进制
八进制和十进制以及十进制和十六进制的转换是一样的原理
二进制转成八进制:
思路一:二进制à 十进制à 八进制
思路二:一个八进制相当于三个二进制,将二进制三位分割成一位
010 100 101 = 245
第二种思路比较简单,也就是8421码,是最常见的BCD编码,将二进制换成十六进制,也是相同的原理:
一个十六进制相当于四个二进制,将二进制四位分割成一位
0000 1010 0101 = a5
十六进制的表示:1-9,10-15用A-F表示
二.运算符。
1.1算数运算符:+,-,*,/,%
short s1 = 10;
short s2 = 20;
short s3 = s1 + s2; // 报错, s1和s2做运算时会自动变为int类型
//正确的写法:
int = s1 + s2;
short s3 = (short)(s1 + s2); //常见错误题:
1.2自增自减 :++ ,--
int a = 10;
int b = a++; b =10 a =11 //++在后 先赋值后运算
int b1 = ++a; b1 =12 a =12 //++在前 先运算在赋值,减减一样
1.3赋值运算符 : = ,+=,-=,*=,/=
常见错误题:
int a = 0;
a+=10; // a = a + 10;
short b = 10;
short c = 5;
b+=c; // b = b + c //没有问题. 会转成int时再自动强转为short
//b = b+c; //下面这种写法是错误的。
1.4关系运算符 : >,<,>=,<=,== ,!=
关系型运算符 (比较运算符) : 结果只有一种是boolean类型, 要么是true(对) ,要么是false(错)
如果判断基本数据类型,比较的变量的两个值。
如果是比较引用类型,比较的是引用的地址值
1.5逻辑运算符: & ,| ,! ,&& ,||
&& 和 &区别和联系:
相同点 : 结果是一样的
不同点 :如果用双&号判断,如果说条件一为false,不会判断条
件二,但是单&号会继续判断
|| 和 |
相同点 : 结果一样。
不同点 : 如果用||号判断,如果说条件一为true,不会判断条
件二,但是单|号会继续判断
1.6位运算符:
它是对二进制位进行计算。
位运算符是可以对十进制的整数进行计算,计算方式:将十进制转为二进制进行计算。
二进制由0和1组成,所以计算的结果要么是0,要么是1
1位运算符的符号:
<1、& (与): 两者都是1的时候我就是1,其他都是0
int a = 6; int b = 3; System.out.println(a&b); // 2
/*原理: 1111-1111 1111-1111 1111-1111 1111-0110 6 & 1111-1111 1111-1111 1111-1111 1111-0011 2 1111-1111 1111-1111 1111-1111 1111-0010 =2 */
<2、|(或): 两者都为0时才为0 ,其他的都是1
int a = 6;
int b = 3;
System.out.println(a|b); // 7
/*
1111-1111 1111-1111 1111-1111 1111-0110 6
|
1111-1111 1111-1111 1111-1111 1111-0011 2
1111-1111 1111-1111 1111-1111 1111-0111 =7
*/
<3、^(异或): 两者不同为1,相同为0
int a = 6;
int b = 3;
System.out.println(a^b); // 5
/*
1111-1111 1111-1111 1111-1111 1111-0110 6
^
1111-1111 1111-1111 1111-1111 1111-0011 2
1111-1111 1111-1111 1111-1111 1111-0101 =5
*/
<4、~(取反) 0变为1,1变为0.
int a = 6;
int b = 3;
System.out.println(~a); // -7
/*
~
1111-1111 1111-1111 1111-1111 1111-0110 6
1111-1111 1111-1111 1111-1111 1111-1001 =-7
*/
如图6取反为-7,-7取反同样是6,所以个人得出结果是:正数取反变为负数再-1,负数取反变为正数也-1
负数的表现形式: 二进制位的最高位为1,那么这个数就是一个负数。
/*
1111-1111 1111-1111 1111-1111 1111-1111 : -1
0000 0000 0000 0000 0000 0000 0000 0000 : 0
-2:1111-1111 1111-1111 1111-1111 1111-1110
-3:1111-1111 1111-1111 1111-1111 1111-1101
-4:1111-1111 1111-1111 1111-1111 1111-1100
-5:1111-1111 1111-1111 1111-1111 1111-1011
-6:1111-1111 1111-1111 1111-1111 1111-1010
-7:1111-1111 1111-1111 1111-1111 1111-1001
0000-0000 0000-0000 0000-0000 0000-0111 = 7
*/
规律:正数取反变为负数-1
负数取反变为正数-1
作用:数据进行加密
如123456可以0-100 和a-z26字母组成,再加上&、|、^、~等位运算符的应用
如:24845845957512317580960 --- >123456
1.7移位操作符:对二进制位进行操作
1 >> 右移
2 << 左移
3 >>> 无符号右移
右移:
System.out.println(6>>1); // --->3 6/2 2*1
System.out.println(6>>2); // --->1 6/4 2*2
System.out.println(6>>3); // --->0 6/8 2*3
System.out.println(6>>4);
System.out.println(9>>1); // --->4 9/2 2*1
System.out.println(9>>2); // --->2 9/4 2*2
System.out.println(9>>3); // --->1 9/8 2*3
System.out.println(9>>4);// --->0 9/16
System.out.println(-6>>1); // -6/2 -->-3
规律: 右移多少位,就用需要移动的数除以2的多少次方。
/* 左移 : System.out.println("-----这个是左移的结果----------"); System.out.println(6<<1); // --->12 6*2 2*1 System.out.println(6<<2); // --->24 6*4 2*2 System.out.println(6<<3); // --->48 6*8 2*2*2 System.out.println(6<<4); //---->96 6*16 2*2*2*2 System.out.println(-6<<2);//--->-24 规律: 左移多少位,就用这个数乘以2多少次方。 */
/* //>>>无符号的右移 System.out.println(6>>>1); //3 System.out.println(6>>>2); //1 System.out.println(-6>>>2); // 1073741822 原理:正数的无符号右移与普通右移原理相同 */
作用 : 提高运算速率。位运算是执行最快。
比如: 以最快的方式计算 2*8
2<<3 == 2*8 = 16
2.8、三元运算符
也叫三目运算符:
结构:
条件?条件成立执行的结果 :条件不成立执行结果 ;
class Demo1
{
public static void main(String[] args)
{
int a = 10;
int b = 9;
int c = b++>=a ? a++ : b+a; //注意这儿的b++>=a 是先执行b>=a,然后再执行b++,因为++在后先赋值在运算,这儿会经常搞错的。然后别忘了b++,再执行b+a,所以c值是20;而不是11 / 19
System.out.println(a); //10
System.out.println(b); //10
System.out.println(c); //20
//需求:Java中两个值交换的三个方法:
//1.借助中间量
int x = 10;
int y = 20;
int temp = x;
x = y;
y = temp;
//2.数值加减
int x = 10;
int y = 20;
x = x + y;
y = x - y;
x = x - y;
//3.位移运算交换
x = x^y;
y = x^y;
x = x^y;
//System.out.println(y^x^x);
//System.out.println(x^y^y);
Java学习笔记(2)