前言
青空の霞光的JavaSE课程在bilibili上算是非常好的新手Java课程,较为通俗易懂,笔者也是打算过一遍,顺便写写感触。
一、Java及计组的基础引入
Java之父——詹姆斯·高加林
计算机的五大基础构件:运算器、控制器、存储器、输入设备和输出设备
Java的经典——“ Write once, run anywhere ”
Java兼具了编译型语言和解释型语言的特性,但可能也因此带来了一些缺陷。
JDK要包含JRE,多出了开发工具。
二、Java的一些基本类型
计算机中的二进制表示:
1bit代表1位,同时8bit位一字节,两个字节为一个字 ;
Java中,首位一般代表符号位
提出了原码、反码与补码:
源码:符号位+二进制
反码:除符号位外,其余全部取反
补码:在反码的基础上加一,零的表示方式唯一;
在java编程中,545648941这些都默认是int类型,因此在向long赋值时,需要在末尾加上L,long a = 546548861L,这样才正确。
数据可以用下划线来加以划分,并无区别:1_000_000与1000000一样
十六进制(0x): 0xAF == 175
八进制(0) : 012 == 10
int的最大值+1,由于补码规则,会变为int的最小值;
在java编程中,像1.5264这些默认都是double类型,因此在向float变量赋值时,需要在末尾加上f,
float a = 12.2445f,这样才正确。
由此引出隐式转换规则:
byte -> short -> int -> long -> float -> double
char类型中:65->A(0~65535),可以包含中文
Unicode几乎包含了世界上所有语言的字符,现流行UTF-8。
Unicode是字符集,而UTF-8以及UTF-16均是编码规则。
三、Java的一些运算符及结构
对于char、short、byte在进行运算时,一律会转为int再进行计算。
取负值的情况, a = -a;
换行符为\n
在进行数据类型强制转换的时候,如下述代码所示,最终b会展示为128,而c则是-128;
public static void main(String[] args)
{
int a = 128;
short b = (short) a; //128
byte c = (byte) c; //-128
System.out.println(b);
}
而对于a++与++a:
int a = 8;
int b = -a++ + ++a;
System.out.println(a); // a = 10
System.out.println(b); // b = 2
位运算符包括:& , | , ^ , ~ , << ( * 2 ) , >>( / 2 )
左移操作<<:高位直接丢弃,低位补0;
右移操作>>:低位直接丢弃,符号位是什么高位补什么;
这都是在负数补码的基础上进行;
&&与||都具有短路特性;
- &&的左侧条件为false,则返回false,不再运行右侧条件;
- ||的左侧条件为true,则返回true,同样不在运行右侧条件;
三元表达式:
表达式 ?结果一 :结果二
switch语句——注意在case语句结束时加上break;
int a = 10;
switch(a)
{
case 1 :
System.out.println(a);
break;
case 10:
System.out.println(a);
break;
default:
System.out.println("error")
}
for(;;) 这个将会无限循环;
continue和break遵循就近原则,只对最近的循环生效;
当需要跳出外层循环时,可以对循环进行标签;
out:for(int i = 0 ; i < 2 ; i++)
{
in:for(int j = 0 ; j < 2 ; j++)
{
if(i > j) break out;
}
}
四、些许感想
1.for循环的底层实现是基于栈来进行的,具体看字节码,较复杂;
2.for循环中i++可以等效替代为i+=1;
3.int的最大值为21亿,可以打印Integer.MAX_VALUE来进行查看;
4.类是模板,对象是基于模板的具体实例;
5.对应的class就是对应的类,有着相应的成员变量和成员方法;
6.对象类型的变量存放的是对象的引用:
Preson p = new Person();
Person p1 = p;
这里的p存放的是一个Person对象的引用,这里的赋值操作,本质上是引用对象的传递,类使用的都是引用类型。
7.空指针异常(给出一个示例):
Person p = null;
p.name ="小红";
8.包的访问权限:
private——仅允许在本类中使用;
默认——允许在同包的类使用(在同一包下且在同一包下的第一层);
protected——允许在不同包下的子类;(在同一包的分支下);
public——允许不同包下的类;
9.所有的类的父类,都最终可以追溯到Object类,因此继承了Object类的一些方法,例如,clone()、equals()、toString();
10.方法的重写与重载:
重写:即对先前方法内容的覆盖;
重载:通过方法输入参数的不同,增加方法的多样性,从而满足各种需求;
11.子类中继承来的方法,在重写时的级别,只能比父类高或持平,而不能比父类低;
12.abstract关键字用于定义抽象类和抽象方法,即内容缺省,待子类来进行完善,且子类必须实现该抽象方法。
13.抽象类无法直接实例化,抽象类及抽象方法一般仅用于继承,且抽象方法的权限不能为private。
14.接口:对某一行为的具体定义,相当于抽象类中的抽象方法,接口中默认方法为public abstract,当使用implements该接口时,必须要实现该接口下的全部抽象方法;
15.在java8以后,default在接口中为默认实现,接口中不允许有成员方法和成员变量,但允许有静态变量和静态方法;
16.如果类要实现克隆,那么就要implements Cloneable方法,并将权限由protected变为public,但并不指向同一地址。
17.接口可以继承自其他接口,且可以多继承;