茄子回顾Java,从零开始!(Java基础 一)

Java基础

1、JDK是什么?JRE是什么?JDK和JRE的区别?

JRE:Java Runtime Environment ,Java虚拟机、库函数、运行Java应用程序和Applet所必须文件
JDK:Java Development Kit:JRE的超集,包含编译器和调试器等用于程序开发的文件

Java运行环境的三项主要功能:

  • 加载代码 :由class loader 完成
  • 校验代码 :由bytecode verifier 完成
  • 执行代码 :由 runtime interpreter完成

2、HelloWorld

编译:利用编译器(javac)将源程序编译成字节码文件,文件名:源文件名.class,
javac命令编译HelloWorld.java文件为HelloWorld.class文件,
运行:利用虚拟机(解释器,java)解释执行class字节码文件。java命令

3、标识符(不能是关键字)

  • 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。譬如:111stu 就是不合法。
  • 标识符不能是 Java关键字和保留字(Java预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。如:不可以使用 void 作为标识符,但是 Stuvoid 可以。
  • 标识符是严格区分大小写的。并且没有长度限制的。 一定要分清楚 Student和 student是两个不同的标识符!

4、数据类型

茄子回顾Java,从零开始!(Java基础 一)_第1张图片
数据类型.jpg
茄子回顾Java,从零开始!(Java基础 一)_第2张图片
数据类型对应位数.jpeg

5、基本数据类型转换

自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
强制转换:显示转换,丢失精度

6、String、StringBuffer、StringBuilder

String是引用类型。可以用String str= new String("abc");的形式来创建,也可以用String str ="abc";的形式来创建

String str = "abc"创建对象的过程
1 首先在常量池中查找是否存在内容为"abc"的字符串对象
2 如果不存在则在常量池中创建一个"abc"的字符串对象,并让str引用 该对象
3 如果存在则直接让str引用该对象

String str = new String("abc")创建对象的过程
1首先定义一个str的String类型的引用并存放在栈中
2在字符串常量池中查看是否存在内容为"abc"字符串对象
3若存在则跳过这个步骤,若不存在,则在字符串常量池中创建一个内容为"abc"的字符串对象
4执行new操作,在堆中创建一个指定的对象"abc",这里堆的对象是字符串常量池“abc”对象的一个拷贝对象
5让str指向堆中“abc”这个对象(也就是存储这个对象的在堆中的地址)

常用操作:

  • (1) 字符串的连接
    public String concat(String str)
    该方法的参数为一个String类对象,作用是将参数中的字符串str连接到原来字符串的后面.
  • (2)求字符串的长度
    public int length()
    返回字串的长度,这里的长度指的是字符串中Unicode字符的数目.
  • (3)求字符串中某一位置的字符
    public char charAt(char ndex)
    该方法在一个特定的位置索引一个字符串,以得到字符串中指定位置的字符.值得注意的是,在字符串中第一个字符的索引是0,第二个字符的索引是1,依次类推,最后一个字符的索引是length()-1.
  • (4)字符串的比较
    比较字符串可以利用String类提供的下列方法:
    public boolean equals(Object anObject)
    该方法比较两个字符串,和Character类提供的equals方法相似,因为它们都是重载Object类的方法.该方法比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false.
  • (5)从字符串中提取子串
    public String substring(int beginIndex)
    该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回.
  • (6) 字符串中单个字符的查找
    字符串中单个字符的查找可以利用String类提供的下列方法:
    public int indexOf(int ch)
    该方法用于查找当前字符串中某一个特定字符ch出现的位置.该方法从头向后查找,如果在字符串中找到字符ch,则返回字符ch在字符串中第一次出现的位置;如果在整个字符串中没有找到字符ch,则返回-1.
  • (7) 字符串中多余空格的去除
    public String trim()
    该方法只是去掉开头和结尾的空格,并返回得到的新字符串.值得注意的是,在原来字符串中间的空格并不去掉.

运行速度:StringBuilder > StringBuffer > String
StringBuilder:非线程安全,StringBuffer:线程安全

因为,String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

7、变量(对应于常量 static final)

局部变量:方法或语句块内部定义的变量。生命周期是从声明位置开始 到”}”为止。在使用前必须先声明和初始化(赋初值)
成员变量(实例变量):方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终,隶属于类。如果不自行初始化,他会自动初始化成该类型的默认初始值(数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false)
静态变量(类变量):使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,他会自动初始化成该类型的默认初始值(数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false)

成员变量在堆内存中,由于对象的存在,才在内存中存在;
局部变量在栈内存中;
局部变量必须初始化,否则不能运行;
成员变量有默认初始化值,因此可以不初始化;
当成员变量和局部变量名称一致时,默认使用局部变量

8、运算符

  • 算数运算符
  • 自增自减运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 三目运算符
  • instanceof运算符

9、代码结构

选择结构:
if else
switch case
switch 语句中的变量类型可以是: byte、short、int 、char。
从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。

循环结构:
while 循环
do…while 循环
for 循环
增强for 循环
增强for循环有些缺点,
例如不能在增强循环里动态的删除集合内容,不能获取下标等

  • (1)对于非集合类(没有实现 Iterable接口)的数组遍历,增强型for循环和普通循环遍历原理相同,效率相同
  • (2)对于集合类(实现了Iterable接口),增强型for循环的遍历其本质就是迭代器 iterator的遍历,和普通循环遍历相比,各自有自己适用的场景,比如说普通for循环比较适合List类(数组类)遍历通过下标查找数据的,而增强型for循环则比较适合链表结构的集合的遍历。

10、数组

数组声明
int a[];
int[] a;

数组初始化
静态初始化:
int a[]={1,2,3,4};
动态初始化:
int a[]=new int[5]; 创建一个长度为5的int 数组。

数组遍历
可以使用普通for循环或者foreach循环遍历数组。

  • 数组是对象类型,声明数组时注意new的使用;
  • 声明数组时一定要考虑数组的最大容量,数组一旦被声明了,大小就固定了,不能修改容量。
  • java 支持多为数组,使用比较少。

你可能感兴趣的:(茄子回顾Java,从零开始!(Java基础 一))