java的学习基础

一曲红尘心若向阳 2022-05-12 22:34:32

1.修改eclipse默认编码:utf8

2.src:源代码文件夹; 包是用来打包存放我们的java源代码的。.java文件是源代码

3.main函数,main入口:有main入口的类,是可以直接运行的。

4.java的编译原理:首先,java类需要用javac编译,得到可执行的class文件,然后用java命令执行。

5.二进制:计算机能识别计数方式。计算机的核心元件:二极管。

十进制:(1111)10 = 1x10^3+1x10^2+1x10^1+1x10^0=1000+100+10+1=1111

二进制:(1111)2 = 1x2^3+1x2^2+1x2^1+1x2^0=8+4+2+1=15

6.位,bit:二进制的每一位代表一比特

字节,byte:1byte=8bit; 1111 1111这个就是一byte的长度。

1byte最大能表示多少?2^8-1=255。为什么是-1?因为是从0-255,这里是256个数。

有符号数和无符号数:无符号数,最高位代表数;有符号数,最高位代表符号。

正数,最高位代表+;负数,最高位代表-。

short,短整型,2个字节:1111 1111 1111 1111。short的范围?[-32768,32767]

int,整型,4个字节。int的范围?[-2147483648,2147483647]

long,长整型,8个字节。long的范围?

float,浮点数,4个字节。

double,双精度小数,8个字节。

单精度和双精度的区别:float最多只能表示小数点后面八位,double能精确到小数点后面16位

7.如果是特殊字符,需要用\转义。

8.在数学里面,=既表示给某个未知数赋值,也表示判断两个未知数是否相等。

在编程里面=表示赋值,==表示判断相等。

9.类型强转:算式的结果,是算式里面精度最高的类型。

强转:默认高精度的,不能直接赋值给低精度的,需要用(float)1.1d,强转会丢掉精度。正确,但不精确。

低精度转换为高精度的数,会丢失精度。精确但不正确。

1111,1111 0110。

1. ++,--;自增,自减。

++在效果上等于:i=i+1;--在效果上等于:i=i-1;

++i,是在取值之前,i+1;i++,是在取值之后,i+1;

2.赋值:=

把一个值给变量。变量,值是可变的量。

i+=1它就是i = i + 1;

3.位移,二进制

36的二进制:0010 0100 右移一位:0001 0010:前面空出来的,补0,后面被移出去的,丢掉;得到的结果是18。所以,又移其实是做什么操作?除法操作,除以2。左移,反之。位移只能用在整数。不能位移负数位。

4.寄存器计算原理。数据寄存器。

计算的时候,我们不是直接用变量来计算的,我们需要先把变量的值取出来,放到寄存器里面,再用寄存器进行计算。

5.关系运算,判断。

6.逻辑运算,与、或、非。

与,而且:两个判断都要成立,两个判断只要有一个是假的,就一定是假的

或,或者:两个判断只要有一个成立即可,两个判断只要有一个是真的的,就一定是真的

非,相反:某个判断的反面。

“!”(逻辑非)、“&&”(逻辑与)、“||”(逻辑或)

7.取值范围:!(x>1 && x<=2)

x的取值范围是什么?(-∞,1] ∪ (2,+∞)

8.逻辑运算和关系运算的优先级

!高于关系运算

关系运算高于 &&、||

&& = ||

1.int y=3; int x; x=1/y; 最后x=0。

2.求取值范围:x<-3 x="">=5,x的取值范围。[-∞,3)∪[5,∞) else里面,x的取值范围?[-3,5)

3.字符的比较和运算,取的是ascci码进比较和运算。(不是和字符串)

4.循环:假设有5000个学生,老师要他们报数。

每一个同学其实报数这个功能是一样的。他们所做的所有事情是一样的。

这种场景在编程的时候就需要用到循环。

5.正整数,和自然数

控制循环的条件,当某个标识性的变量不满足条件的时候,循环结束。

第一个语句只初始化一次,每一次执行前都会执行第二个语句,每一次执行for循环之后都会执行第三条语句。

6.死循环:标志性的变量永远不会不满足结束循环的条件。

7.while语句是先执行判断,后执行循环。do...while语句是先执行循环,后执行判断。

8.跳过本次循环,continue;跳出循环,break

switch里面的break是什么意思?跳出switch语句。

9.打印九九乘法表:其实就是i*j,然后,i从1到9循环,j也从1到9循环。

10.格式化输出:%4d

11.取余,%:计算整数除法时的余数。

1.循环的边界。如果这个数是质数,最后j是等于i还是等于i-1?

2.复杂度:尽量避免不必要的操作

3.try…catch:尝试执行某些语句,如果报错,就执行catch里面的语句

4.数据结构:

100个学生:一个班级。--如果用代码,就需要对应一个数据结构,集合Set。

100个名字:用表格一列。--对应代码,数组或者列表,Array,List

学号和名字对应:Map,字典。

5.int--Integer;double--Double;boolean--Boolean;

6.遍历:一个一个获取,或者说查看。

7.迭代器:指针,它从数据结构里面,入口开始,用it.next,可以逐一获取数据结构里面的数据,直到没有新的数据。

8.排序:假设有10个整数。这10个整数用什么存储?数组,Array

9.列表,链表:链条是可以增加和删除环。

10.字典,键值对形式的数据结构

1.集合

set的定义 Sets = new HashSet();

set的使用 s.add("a"); //往集合中添加元素

迭代器  Iteratorit = s.iterator(); //获取到集合s的迭代器

it.hasNext(); //如果集合中还有元素,则返回true,没有则返回false。

String value = it.next();  //获取set中元素的值

输出实例  while (it.hasNext()) {

String value = it.next().toString();

System.out.println("value=" + value);

}

2.数组

(方式1)

定义  int[] arr1 = new int[10]; //定义一个可以存10个整数的数组,长度固定

写入  for (int i = 0; i < 10; i++) { //给数组10个下标对应存储单元,赋10个值

//该方法可以随时修改某一个下标的值

arr1[i] = i;

}

使用  int b=arr1[3]; //获取下标为3的数组单元存储的值

输出实例  for (int i = 0; i < arr2.length; i++) {

//从下标0开始,输出数组的10个值

System.out.print(arr2[i] + ",");

}

(方法2)

定义  int[] arr2 = { 1, 2, 3, 5, 4, 6, 9, 7, 8, 0 };

//定义一个可以存10个整数的数组,并且完成赋值。

使用  int b=arr1[3]; //获取下标为3的数组单元存储的值

输出实例  for (int j : arr2) {

//从下标0开始,输出数组的10个值

System.out.print(j + ",");

}

3.列表

定义  Listl = new ArrayList();

//定义一个用来存放整数的列表,列表是可变长度的。

写入  for (int i = 0; i < 10; i++) {

//往列表里面添加10个整数

l.add(i);

}

使用  l.add(55); //在列表最后添加一个元素,整个列表多了一个元素

l.add(6,55);  //在列表下标为6的位置添加一个元素,原来6和以后的元素后移

l.set(6,555); //把列表中下标为6的位置存放的值,重新赋值为555

输出实例  System.out.println(l);

//直接输出整个列表得所有元素

for(int i=0;i<l.size();i++) {

//从下标0开始,输出列表的所有元素值

System.out.print(l.get(i) + ",");

}

4.Map(字典)

定义  Mapmap = new HashMap();

//定义键为String类型,值为int类型的Map。

写入  for (int i = 0; i < 10; i++) {

//往Map里面添加10个整数

map.put(i + "", i+i);

}

使用  map.put("11",111);

//往map里面添加一个键值对,如果已经有"11"这个键,则会替换原来的值

map.get("1");  //获取map里面键为"1"的值,没有这个键则返回空

输出实例  for(String key : map.keySet()) {

//遍历key,通过key获取value

System.out.print(key + "=" + map.get(key) + "; ");

}

for(Entryentry : map.entrySet()) {

//定义一个map的入口,通过入口一个个遍历map里面的元素和值

System.out.print(entry.getKey() + "=" + entry.getValue() + "; ");

}

Hashset

HashSet内部使用的是Hashmap的实现方法,这两个类内部保存的数据都是通过哈希值排序的。也就是说所有hashCode%size=0的key排在最前,hashCode%size=1的其次,以此类推。至于为什么题主你的输出是有序的,这是一个巧合。首先你Student类的hashCode是id转换成字符串后取哈希值。Java中默认字符串哈希值的计算方法是:s[0]31^(n-1) + s[1]31^(n-2) + ... + s[n-1]所以你五个Student对象的哈希值正好是49~53(数字的ascii码)而HashSet默认的大小是16,五个哈希值除16取余数正好是1~5,所以这五个对象正好是排好序放在HashSet里了。想要得到无序的输出,只要换一个初始大小就行了,例如改成new HashSet(10);

1.substring:字符串子串。

java里面[不是特殊字符,不需要转义。但是,replaceAll的时候,用正则去替换的,在正则里面,[是特殊字符。所以在正则里面必须使用\[。

2.split分割:甘蔗--节。

3.json格式:{"status":"0","t":"1525782909785","set_cache_time":"","data":[{"location":"澳大利亚", "titlecont":"IP地址查询", "origip":"1.1.1.1", "origipquery":"1.1.1.1", "showlamp":"1", "showLikeShare":1, "shareImage":1, "ExtendedLocation":"", "OriginQuery":"1.1.1.1", "tplt":"ip", "resourceid":"6006", "fetchkey":"1.1.1.1", "appinfo":"", "role_id":0, "disp_type":0}]}

json层:

4.toString()。不管结果是什么,都转为字符串

5.计算格式化输出。yh=5

假设每一个输出是4个字符,最后一行的长度?4*5

所以第一个1的位置应该是:(yh/2)*4

1 阅读:55
一曲红尘心若向阳

一曲红尘心若向阳

没有做错什么,错在什么没做