学习Java!

记录学习Java时遇到的一些问题和心得

之前在pintia.cn做些基础的题目。
现在在边看书边逛……
看了一些后端,但是感觉要结合前端才知道在干嘛,为什么这样做……

2020-8-4

Java里在字符串里截取字符串是这样的:

1
2
3
4
5
6
7
8
9
10
11
String n = "0123456789abc";
String s = "Java is cool!";
System.out.println(s.substring(0,6));
//输出Java i (左闭右开)

System.out.println(s.substring(8));
//输出cool! (左闭)

//Java貌似没有-4这种倒着输出几位的
System.out.println(s.substring(s.length()-4));
//输出ool!

2020-8-5

1
2
public static void main(){
}
1
2
3
错误:请将 main 方法定义为:
public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application

这个大概是强制的吧……
当然写成这样也行

1
2
3
//c/c++ style
public static void main(String args[]){
}

2020-8-6

Java中的重载

python的重载:重写方法
Java的重载:用同样的名字定义不同的方法,用数据类型匹配(有歧义则导致编译错误)
因为python是动态类型语言,变量的数据类型不是确定的,而作为静态类型语言的Java可以在变量被调用前确定类型。

Java中的数组

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。他只是创建一个对数组的引用的储存位置。

double[] mylist;

如果变量不包含对数组的引用,那么这个变量的值为null

(貌似Java当中的null是个有意思的东西)
一般的数组调用:
double[] anotherlist = new double[10];
其中anotherlist是一个含有10个double型元素数组的引用变量。这里的引用变量相当于C中的数组指针,这个变量储存着数组第0个元素的地址。即下面类似的操作可以成立:

1
2
3
4
5
6
7
8
9
double[] mylist;
double[] anotherlist = new double[10];
anotherlist[0] = 0.01;
mylist = anotherlist;
System.out.println(anotherlist[0]);
System.out.println(mylist[0]);
System.out.println(anotherlist);
System.out.println(mylist);
//打印出了相同的0.01和相同的地址

在Java中,数组被看作是对象

2020-8-7

Java的字符串

在IDEA中,字符串长度超过65535,进行打印,IDEA会提示java: 常量字符串过长。使用javac 进行编译也会有类似的提示

那要如何读取并处理一个超长字符串呢?
一般的处理

1
2
Scanner input = new Scanner(System.in);
String str = input.next();

但是由于要读取的next过长,字符串变量放不下,就会产生许多问题。
解决方法:

1
2
3
4
try{
ch = (char) System.in.read();
}catch(Exception e){
}

读取完了之后,用stringbuilder来拼合字符串。

1
2
3
4
StringBuilder sb = new StringBuilder();
sb.append(ch);
String str = sb.toString();
System.out.println(str);

用Java处理大数

这方面Java还是比较舒服的

1
2
3
4
5
6
7
8
9
10
11
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger num;
num = BigInteger.valueOf(5);
for (int i=0; i < 10; i++) {
num = num.multiply(num);
}
System.out.println(num);
}
}

https://www.cnblogs.com/aiguona/p/9133554.html

2020-8-10

Java+-操作符的实质

https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/java-operator.md

1
2
3
i += j;
//与下面的语句等价
i = (type of i)(i + j);

2020-8-11

主动赋null

一个没有被引用的对象(原来的引用变量指向别的对象)不再有用,现在他就成为垃圾(garbage),Java会检测垃圾并回收它所占的空间。

如果不再需要某个对象时,可以显式地给该对象的引用变量赋null值,这个对象就会被自动回收。可以用这一点优化内存占用,不过更好的解决方案应该是尽量使用匿名对象(anonymous object)。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信