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);
时间: 2024-10-15 13:09:17

Java学习笔记(2)的相关文章

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记一

只记录一些我认为比较必要,容易出错的地方.(不断更新中) 内存:分为四段,代码段code segment,数据段data segment,栈stack, 堆heap.记住如下图 数据类型: 1.java整形常量默认为int类型,当使用long类型时,因此需要添加“l”或“L”,一般用大写,小写像1.如long i = 888888888888L 2.浮点数时会默认为double类型,因此使用float时需要添加f.如 float i = 0.123f 3.java支持大数运算. 强制转换 flo

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java学习笔记day_01

Java学习笔记(复习整理) 虽然不知道该怎么写,但是不起步就永远不知道该怎么做..刚开始可能会写的很差劲,但会一点一点变好的. 本笔记是以我按照传智播客的视频和Java核心思想来学习,前面的基础部分主要是用于个人的复习使用的. 第一段代码:HelloWorld public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者