java基础语法牛客篇

导航

DOS命令

启动redis

redis-server.exe redis.windows.conf

Java介绍

  1. Java致力于检查程序在编译和运行时的错误。
  2. Java虚拟机实现了跨平台接口
  3. 类型检查帮助检查出许多开发早期出现的错误。
  4. Java自己操纵内存减少了内存出错的可能性。
  5. Java还实现了真数组,避免了覆盖数据的可能。
  6. 注意,是避免数据覆盖的可能,而不是数据覆盖类型

内存

  1. jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。
  2. 常量池属于 PermGen(方法区)

![](https://img-blog.csdnimg.cn/img_convert/68735d1f92bdd918d67bc1000ba68d7a.png#clientId=u7db6f9ff-c2c2-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u6b9cfc0d&margin=[object Object]&originHeight=546&originWidth=1108&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=uef9fd9ec-e0ad-47cc-97bc-086909e6b74&title=)

GC回收机制

GC机制的优点是,系统会自动处理不再被引用的对象,在cpu空闲或者存储空间不足时进行清理,这样编程时就不用弄清内存管理机制,编程者无需管理内存,提高了编程的效率。

关键字

标识符规则

规则[1]Java标识符只能由数字、字母、下划线“_”或“ ”符号以及 U n i c o d e 字符集组成 [ 2 ] J a v a 标识符必须以字母、下划线 “ ” 或“ ”符号以及Unicode字符集组成 [2]Java标识符必须以字母、下划线“_”或“ 符号以及Unicode字符集组成[2]Java标识符必须以字母、下划线”符号以及Unicode字符集开头
[3]Java标识符不可以是Java关键字、保留字(const、goto)和字面量(true、false、null)
[4]Java标识符区分大小写,是大小写敏感的

  1. 标识符的组成元素是字母(a-z,A-Z),数字(0~9),下划线(_)和美元符号($)。
  2. 标识符不能以数字开头。
  3. java的标识符是严格区分大小写的。
  4. 标识符的长度可以是任意的。
  5. 关键字以及null、true、false不能用于自定义的标识符

final

final

  1. final关键字可以用于成员变量、本地变量、方法以及类。
  2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
  3. 你不能够对final变量再次赋值。
  4. 本地变量必须在声明时赋值。
  5. 在匿名类中所有变量都必须是final变量。
  6. final方法不能被重写。
  7. final类不能被继承。
  8. 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
  9. StringBuilder , StringBuffer ,String 都是 final 的。

volatile

  • 禁止了指令重排
  • 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的
  • 不保证原子性(线程不安全)

注释

标识符命名规则

字面量和常量

进制转换

基本类型

八大基本数据类型

byte,char,short,int,long,float,double,boolean

int

规则①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

类型转换

规则

规则1.若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
2.转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4.char型和short型参与运算时,必须先转换成int型。
5.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
Java表达式转型规则由低到高转换:

  1. 所有的byte,short,char型的值将被提升为int型;
  2. 如果有一个操作数是long型,计算结果是long型;
  3. 如果有一个操作数是float型,计算结果是float型;
  4. 如果有一个操作数是double型,计算结果是double型;
  5. 被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。

String

  1. ==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址
  2. String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
  3. equals不能作用于基本数据类型的变量。
  4. 任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加

变量

  1. ++y 是先加再运行,y++ 是先运算再加。
  2. 根据作用域规则,在函数中定义的变量只能在函数中引用
  3. 在函数中定义的变量,其生存期为整个程序执行期间

运算符和表达式

运算符的优秀级

算术和逻辑运算符

运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。
右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
算术右移不改变原数的符号,而逻辑右移不能保证这点。
移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模。

控制语句

switch

  1. 在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。
  2. 在switch语句中,表达式的值不能是null,否则会在运行时抛出NullPointerException。在case子句中也不能使用null,否则会出现编译错误。

循环语句

方法

Java内存划分

数组

  1. 定义数组,等号左边不能出现数字,也就是数组的不管什么大小 不能出现在左边。
    数组第一个就是为什么左边不用标大小,而右边需要标大小?
    首先数组一个对象,它不属于任何类,由jvm在运行期间在堆中创建并继承object,同时添加length属性。由于数组对象所占的内存在堆上,所以在声明时应明确告诉jvm自己所占的大小,方便分配,又因为数组对象的引用在栈中,所以声明时左边就无需标大小,之所以写成2个括号,就是为了表明这个引用指向堆中的二维数组。
    第二个就是为什么右边数组可以只声明几行,无需声明没行的大小?
    大概jvm在运行期间会根据行数分配对应的可扩展空间,方便每一行进行扩充。其实又可以按c语言那样理解,行其实又是一种引用,行首地址又代表一个一维数组。欢迎大佬对第二问题进行补充。

猜你喜欢

转载自blog.csdn.net/AzirBoDa/article/details/125784904