java基础学习笔记(一、java开发基础)

本博客记录一些学习菜鸟教程上java及《java核心技术》这本书时遇到的重要知识点,方便复习。

jdk、jre与jvm

jdk、jre与jvm详细介绍参照如下博客:
https://blog.csdn.net/qq_35326718/article/details/79443911
JDK包含了JRE,JRE又包含了JVM,java的跨平台特性由JVM实现,但是JVM依赖于具体的平台(操作系统),即java可以跨平台,JVM不可以跨平台。

JDK下的bin目录中,javac用来编译,java用来运行。

标识符、修饰符和关键字

标识符:类名、变量名和方法名都是标识符。标识符只能由
英文字符: a-zA-Z
数字: 0-9
符号: _与$组成

标识符规则:
数字不能开头
不可以使用关键字
严格区分大小写,不限制长度起名时,尽量达到见名知意

修饰符:
访问控制修饰符:public、default、protected、private
非访问控制修饰符:fianl、static、abstract、synchronized、 volatile

关键字:java语言保留的,如new,break等。

关键字中包含了修饰符。

数据类型

四类八种
整数:
byte:1字节;-128-127
short:2字节
int:4字节
long:8字节

小数:
float:4字节
double:8字节

字符:
char:2字节

布尔:
boolean:1字节

常量

java中默认的整数类型是int类型。

如果说12345678901比int的取值范围大,所以它就是long类型,这是错误的,在Java中整数常量如果不在-2147483648~2147483648之间就必须添加“L”后缀。

java中默认的浮点类型是double类型。
1.26是double类型,1.26F是float类型。

数据类型及变量

类型自动转换:byte—>short,char—> int —> long—> float —> double。
不能对boolean类型进行类型转换。在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

强制类型转换:
转换过程中可能导致溢出或损失精度。浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

访问修饰符

接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public,而不是default。

类和接口不能声明为 private。

子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

非访问修饰符

static方法不能调用非static的变量(生命周期问题)。

final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
被 final 修饰的成员变量(常与static一起将成员变量变为类变量)必须显式指定初始值。声明 final 方法的主要目的是防止该方法的内容被修改,类中的 final 方法可以被子类继承,但是不能被子类修改。

声明抽象类的唯一目的是为了将来对该类进行扩充。抽象类中可以包含抽象与非抽象方法,抽象类可以不包含抽象方法,但抽象方法一定被包含在抽象类中。

序列化的对象包含被 transient 修饰的实例变量时,JVM跳过该特定的变量。

volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

运算符

除法“/”当两边为整数时,取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除。

诸如+=这样形式的赋值运算符,会将结果自动强转成等号左边的数据类型。
byte x = 10;
x += 20;// 相当于 x = (byte)(x+20);

前缀自增:int a = 1;b = ++a++;结果a=2,b=2。
后缀自增:int a = 1;b = a++;结果a=2,b=1。

位运算符:A=60,二进制为0011 1100
“<<” 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
“>>” 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即1111
“>>>” 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A >>> 2得到15即0000 1111

instanceof也是运算符(第一次知道)。

循环语句

增强for在java5中引入。for循环无法修改集合中的变量,会抛异常。迭代器可以,但是会有KW异常,最好也不要用,可以用java8过滤集合中的元素。

do…while语句即使不满足条件,也会执行一次。

break 跳出最里层的循环,并且继续执行该循环下面的语句。

continue 适用于任何循环控制结构中,作用是让程序立刻跳转到下一次循环的迭代。

break是跳出,continue是跳过。

分支语句

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java7 开始,switch 支持字符串,同时 case 标签必须为字符串常量或字面量。

case 语句不是必须要包含 break,可以不包含。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

case穿透性案例:

switch(用于表示星期的数字) {
    case 1 :
    case 2 :
    case 3 :
    case 4 :
    case 5 :
        输出工作日;
        break;
    case 6:
    case 7:
        输出休息日;
        break;
}

Number类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
自动装箱、自动拆箱。

Character类

Character类是基本数据类型char的包装类。

方法

当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。

方法的参数范围涵盖整个方法。参数实际上是一个局部变量。

命令行参数:程序运行时候再传递参数给它,这要靠传递命令行参数给main()函数实现,命令行参数是在执行程序时候紧跟在程序名字后面的信息。代码如下:

   public static void main(String args[])
   { 
      for(int i=0; i

如下是代码的运行:

$ javac CommandLine.java 
$ java CommandLine this is a command line 200 -100
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

命令行参数以空格分开。

构造方法

构造方法用于初始化对象,构造方法和它所在类的名字相同(与普通方法不一样了,构造方法名首字母大写),但构造方法没有返回值。

类都有默认的构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为 public,构造函数也为 public;类改为 private,构造函数也改为 private)。

finalize方法

finalize( )方法在对象被垃圾收集器析构(回收)之前调用,在 finalize() 方法里必须指定在对象销毁时候要执行的操作。本来Java 的内存回收可以由 JVM 来自动完成,finalize方法在手动回收时使用。

具体参考博客:https://www.cnblogs.com/Smina/p/7189427.html

你可能感兴趣的:(java基础)