Java语法
huangchucai opened this issue · 0 comments
Java语法
一. 编译
-
Java编译器(javac):把我们平时写的
*.java
的文件,编译成*.class
(是一种特殊的二进制文件)// 会生成一个hello-world.class文件 $ javac hello-world.java
-
字节码:字节码是已经经过编译,但是并不是特定的机器码的一种中间代码。需要解释器转译后才能成为机器码
-
Java解释器: 是JVM中的一部分,用来把字节码转译成机器码来执行程序。
-
JVM(Java虚拟机):
- JAM有自己的完善的硬件架构,如处理器,堆栈,寄存器等。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在不同的平台不加修改地运行。由于JVM可以适应不同的操作系统(只需要安装对应的JVM到不同的操作系统上),所以这就成就了Java可以适应在不同的操作系统上。
- JVM只负责运行字节码: JVM把每一条要执行的字节码交给解释器翻译成对应的机器码,然后由解释器执行
-
环境和问题
-
安装Java程序和配置环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
-
java命令就在CALSSPATH目录下找对应的class文件
// 会在CLASSPATH目录下寻找HelloWorld.class文件 java HelloWorld // 会在CLASSNAME找hcc目录,然后再到hcc目录上面找Text.class文件 java hcc.Test
-
如果配置错误,例如CLASSPATH漏了".:",那么就不会再当前目录查找了
java -cp . HelloWorld
参考链接
-
二. 数据类型
2.1 基本数据类型
-
六种数据类型:
byte
short
int
long
float
double
,主要是取值范围和所占内存的区别,90%的情况下都是用int/long
-
字符类型:
char
注意: 1. char和String的区别,
char
是单引号,一个字符 -
布尔型
true
/false
总结: 8种基本类型对应的包装类(Integer
Long
Short
Byte
Double
Float
Character
Boolean
)这些包装类都存放在java.lang.xxx
中
-
相互转换
# 1. int to String (n is int) String s = String.valueOf(n); String s = Integer.toString(n) String s = "" + n
2.2 引用数据类型
- 对象和数组
三. 修饰符
Java中修饰符的作用主要有两种,一种访问修饰符(用来控制权限),一种用来控制非访问修饰符(比如值是否可以修改,访问的方式,是否可覆盖)
3.1 访问权限方面
- 类内可访问
- 包内可访问
- 子类可访问
3.2 变量的修饰符
Java 的变量分为2中,类变量(实例的属性)和方法变量,方法内的变量只能用一种修饰符
final
表示常量,不能更改,下面主要讨论类变量
-
访问权限的控制(
public
,protected
,private
,default
)public String publicString = "public"; protected String protectedString = "protected"; private String privateString = "private"; String defaultString = "default"; ` public: 任何地方都可以访问,对访问类变量无限制 protected: 同一个包内可以访问,或者不同包的子类访问 private: 同一个类内可以访问 默认(default): 同一个包内可以访问 `
-
非访问修饰(
static
final
)class Test { static String staticString = "static"; final String finalString = "final" } ` static: 静态变量,就是可以不实例就可以访问,例如 Test.staticString, 但是也实例也可以访问,Test test = new Test() test.staticString但是不推荐实例访问 final: 常量,一旦赋值了就不能修改,对象的指针不能被改变 `
3.3 方法修饰符
-
访问权限的控制(
public
,protected
,private
,default
):功能与类变量的一样// 关于方法的修饰符 public void printPublic() { System.out.println("public method") } protected void printProtected() { System.out.println("protected method") } private void printPrivate() { System.out.println("private method") } void printDefault() { System.out.println("default method") }
-
非访问控制的(
static
,final
,abstract
)static void printStatic() { System.out.println('static method') } final void printFinal() { System.out.println('final method') } abstract void printAbstract() { } ` static: 和类变量的功能一样,类可以直接调用 final: 表示在继承的关系中,这个方法不能被子类覆盖重写 abstract: 指定子类必须实现的方法 `
3.4 构造函数的修饰符(只有访问权限的修饰符)
-
访问修饰符
class Test { public Test(){ } protected Test(int i){ } private Test(int i,int j){ } Test(String string){ } } ` private: 用来修饰构造函数的时候,其他类不能通过new的方式来获取实例,能够有效的控制创建行为 `
3.5 类修饰符
-
只有4种
public
default
abstract
final
// public,默认,abstract,final。 public class Test1 {} class Test2{} abstract class Test3{} final class Test4{} ` abstract:表示该类为一个抽象类,不能实例化该类,即不能使用Test3 test3 = new Test3();的方式获取Test3的实例。 final:表示该类不能被子类继承,该类即为最终类,不可再被继承 `
四. I/O
4.1 名词解释
- 内外: 在电脑上的数据有三种储存方式,一种是外存,一种是内存,一种是缓存。比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的,外存的存储量是最大的,其次是内存,最后是缓存,但是外存的数据读取也是最慢,其次是内存,缓存最快,所以我们从外存读取数据到内存以及将数据从内存写到外存中。
- 输入流(
Input Stream
): 程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道 - 输出流(
Output Stream
):程序向输出流写入数据。将程序中的数据输出到外界(显示器,打印机,文件,网络) - 流:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。
4.2 数据流分类
流中的数据主要是分为2类,一类是未经过加工的原始二进制数据,一类是经过一定编码处理后符合某种格式规定的特定数据。
字节流:数据流中最小的数据单元就是字节。
InputStream
输入System.in
FileInputStream
OutputStream
输出- System.out
- FileOutputStream
BufferedInputStream
和BufferedOutputStream
Stream
用于直接处理字节
字符流: 数据流中最小的数据单元是字符。Java中一个字符占用2个字节。例如:InputStreamReader
中的read(char[])
;
- Reader : 把字节转换成字符,图片,音乐等
- InputStreamReader (
FileReader
) - BufferedReader(
bufferedReader.readline()
)
- InputStreamReader (
- Writer: 把字符转换成字节然后再转换成stream存入设备
- OutputStreamWriter (
FileWriter
) - BufferedWriter(
bufferedWriter.write(String)
)
- OutputStreamWriter (
4.2 实例
-
java系统自带的标准数据流:
java.lang.System
-
输出流(
System.out
): 向标准输出设备输出数据。-
数据类型为
PrintStream
-
方法
Void print(参数) Void println(参数)
-
-
输入流(
System.in
): 读取标准输入设备数据(从标准输入获取数据,一般是键盘)-
数据类型为
InputStream
-
方法
int read() //返回ASCII码。若,返回值=-1,说明没有读取到任何字节读取工作结束。 int read(byte[] b) //读入多个字节到缓冲区b中返回值是读入的字节数
-