此文章为阅读Java菜鸟教程的笔记,内容基本都是摘自自菜鸟教程,截取部分暂时没记住的,再补充部分个人感想。
Java菜鸟教程网址如下: https://www.runoob.com/java/java-tutorial.html
类变量:独立于方法之外的变量,用 static 修饰。
类变量也称为静态变量。静态变量在第一次被访问时创建,在程序结束时销毁。
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
实例变量:独立于方法之外的变量,不过没有 static 修饰。
实例变量在对象创建的时候创建,在对象被销毁的时候销毁。
实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
局部变量:类的方法中的变量。
局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。
局部变量是在栈上分配的。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
这一章节需要多次反复查看。
特别是protected,是最难理解的Java类成员访问权限修饰词,详细介绍可以查看 Java protected 关键字详解
除了protected之外,还有abstract、synchronized、transient、volatile我都不熟悉,等工作中遇到了再进一步学习可能效果更好。
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。这几个位运算符我用的很少,总是记不清。
位运算符作用在所有的位上,并且按位运算。下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13:
可以看到 <
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
如果被比较的对象兼容于右侧类型,该运算符仍然返回true。
class Vehicle {}
public class Car extends Vehicle {
public static void main(String[] args){
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
Vehicle a = new Car();
boolean result = a instanceof Car;//返回true
System.out.println( result);
}
}
一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。
这个部分容易出错,我第一次参加面试的时候就被问过
Integer a = 1;
Integer b = 1;
Integer c = 150;
Integer d = 150;
System.out.println(a==b); //true
System.out.println(c==d); //false
//当int的值在[-128,127]之间的时候,valueOf会返回指向已经存在的对象的引用;否则创建一个新的Integer对象.
除此之外这里一般还是涉及到 == 和 equals的区别。
这部分的内容搜索 java的装箱拆箱就会有很多帖子。
这里放两个:
https://www.cnblogs.com/wang-yaz/p/8516151.html
https://blog.csdn.net/qecode/article/details/83040059
字符串实际上就是一个 char 数组,并且内部就是封装了一个 char 数组。
并且这里 char 数组是被 final 修饰的,IDK源码如下:
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/** The value is used for character storage. */
private final char value[];
注意:
String s = "Google";
System.out.println("s = " + s);
s = "Runoob";
System.out.println("s = " + s);
输出结果为:
Google
Runoob
从结果上看是改变了,但为什么说String对象是不可变的呢?
原因在于实例中的 s 只是一个 String 对象的引用,并不是对象本身,当执行 s = “Runoob”; 创建了一个新的对象 “Runoob”,而原来的 “Google” 还存在于内存中。
这部分碰见了再翻看,用多了就记下来了。
https://www.runoob.com/java/java-date-time.html
有以下几个部分:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
正则表达式的特点是:
注意:正则表达式写好后,没有错对之分,返回结果只是true和false
这部分无法一遍记住,以后工作中碰到了再翻看,多用几次才好记。
https://www.runoob.com/java/java-regular-expressions.html
正则表达式在线测试工具
工作中遇到了再进一步学习,边实践边学习。
https://www.runoob.com/java/java-exceptions.html