复习:
jdk = jre + kit
java javac
javadoc
jar
path: 想直接在cmd输入命令(可运行文件的名字)
java
java可执行文件所在路径-->配置到path中
javac : 编译
.java源文件 -->编译-->.class字节码文件
.java文件中可以编写多少类?
只有一个类能被public 修饰 并且类名和文件名一致
检查语法错误.
java : 运行 : 在内存中运行
java Hello
jvm -- >进行类加载-->把.class中的 类 加载到内存中
启动类加载 3
如果/jre/lib/rt.jar中包含Hello这个类 就处理
扩展类加载 2 4
如果/jre/lib/ext/*.jar 中包含Hello这个类 就处理
本地类加载 1 5
classpath:.
调用主方法
public static void main(String[] args){}
jvm -- > 检查代码是否危害电脑
字节码验证,
栈不能溢出,
方法的参数类型需要正确,
类型转换需要正确。
*如果上面都正常把字节码转换为机器码进行运行。
一次编译,到处运行.
指定的.class
不同的操作系统安装了不同的jdk
顶级元素2:
package:
包 :
写在源文件的第一行
作用:装 .java源文件
区别可能同名的源文件
可以把具有相同/类似功能的类放在同一个包中
cd briup
mkdir ch2
cd ch2
mkdir src bin
pwd
vi src/Test1.java
编译:javac -d bin src/Test1.java
-d :把编译以后的.class文件放在指定目录下(bin :里面都是可执行文件)
即用于自动生成包文件
运行:java -cp bin com.briup.ch2.Test1(java -cp bin com/briup/ch2/Test1)
-cp : 运行指定目录中的类,这个目录可以是文件夹,也可以是jar包
import 导入: (导包)
当前类中使用Test1
ch1/Test1.java
ch2/Test1.java
import ch1.Test1
main(){
new Test1();
new ch2.Test1();
}
注释:
//
/* */
文档注释:使用javadoc生成api
/**
@param
@return
@author
@version
*/
vi src/Test3.java
javadoc -d doc src/Test3.java
javadoc -d -author -version src/Test3.java (@author 与@version 只能在package下注释,不可以在方法下注释;;;警告 - 不能在method文档中使用标记@version。只能在以下类型的文档中使用该标记: overview, package, class/interface)
package com.briup.ch2;
/**
这是一个测试文档注释的类
使用这个类可以生成api
javadoc -d doc src/Test3.java
javadoc -d doc -author -version src/Test3.java : 显示作者,版本信息
@author xyw
@version 1.0
*/
public class Test3{
/**
@param args 这个是main方法的参数
*/
public static void main(String[] args){
}
}
分号: java中一句代码(语句)以分号结尾,必须出现。
注:大括号后面可以不加
空格 :
空格 tab 回车 换行 都是为了格式的好看出现,没有实际功能。
分隔关键字;类型 和 变量名;
优化代码格式
代码块 :
代码需要写到代码块中,有名字的代码块就是方法。(不写在代码块中,会报错,而且很难看出是这个错误)
{
}
标识符:
1) java标识符以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合;
2) 大小写敏感
3) 没有长度限制。
4) 不能是java中的关键字
package名:全小写 com.briup.ch2
类名:首字母大写,剩下的单词驼峰命名法则 HelloWorld.java
方法名:首字母小写,剩下的单词驼峰命名法则 getName()
变量名:首字母小写,剩下的单词驼峰命名法则 maxSize
关键字
Java语言的关键字是程序代码中的特殊字符。包括:
. 类和接口的声明——class, extends, implements, interface
. 包引入和包声明——import, package
. 数据类型——boolean, byte, char, double, float, int, long, short
. 某些数据类型的可选值——false, true, null
. 流程控制——break, case, continue, default, do, else, for, if, return, switch, while
. 异常处理——catch, finally, throw, throws, try
. 修饰符——abstract, final, native, private, protected, public, static, synchronized, transient, volatile
. 操作符——instanceof
. 创建对象——new
. 引用——this, super
. 方法返回类型——void
Java语言的保留字是指预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
. 所有关键字都是小写;
. friendly, sizeof不是Java语言的关键字,这有别于C++;
. 程序中标识符不能以关键字命名;
数据类型:规定数据在内存中所占用的空间
基本数据类型:
byte 1字节 8bit 0000 0000
short 2字节 短整型 16位
int 4字节 整型 32位 10
long 8字节 长整形 64位 10l
float 4字节 单精度浮点型 32位 10.11f
double 8字节 双精度浮点型 64位 10.11
boolean : true false
char :一次只能表示一个字符 两个字节表示一个字符 16位
数字
字母
普通字符
中文汉字
引用数据类型;
类
String
接口
数组
位: bit:
在数字电路和电脑技术中采用二进制,代码只有"0"和"1",其中无论是"0"或是"1"在CPU中都是一"位"。
eg: 0000 1111 ---> 8位 8bit
字节: byte
字节是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八位,也表示一些计算机编程语言中的数据类型。
变量:用来承载一个数据
为了后期操作数据方便
声明变量;
数据类型 变量名;
给变量赋值:
变量名 = 数据类型对应的值;
使用变量:
syso(变量名);
简写:
数据类型 变量名 = 数据类型对应的值;
同时声明多个变量:
数据类型 变量名1,变量名2,......;
同时声明多个变量并赋值
数据类型 变量名1 = 值,变量名2 = 值, ......
字符:
char a = 'a';
char a = '1';
char a = 97;
char a = 0x0061;
char a = '\u4e06';//可以去unicode表中查看
char a = '中';
表示特殊字符:使用转义字符 \ ,只作用与后一个字符,使后一个字符以原样输入不再代表特殊含义
char a = '\'';
char a = '\\';
utf-8(属于unicode) : 两个字节,表示一个字符
ASCII 0-127 A-z : 所有编码都兼容它(所以在乱码时,ASCIL码不会出错)
gb2312 : 中文
gbk :中文
ios-8859-1
......
编码(二进制码对应的翻译含义)
乱码:用utf-8编译的,用gbk来解析,就会出现翻译不匹配问题
uft-8下 : 0001 1100 (假如代表): 中
gbk下 : 0001 1100 (假如代表): 过
字符编码:java使用的是Unicode(UCS-2)(utf-8)
字符编码:指用一串二进制数据来表示特定的字符
1,ASCII 编码
主用于表达现代英语和其他西欧语言中的字符。它是现今最通用的单字节编码系统,它只用一个字节的7位,一共表示128个字符
2,ISO-8859-1编码
国际标准化组织(ISO)为西欧语言中的字符制定的编码,兼容ASCLL编码
3,GB2312编码
简体中文字符的编码它与ASCII字符编码兼容,收录了7445个字符
4,GBK编码
对GB2312字符编码的扩展收录了21886个字符
5,Unicode字符编码
收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。
5.1:UCS(Universal Character Set)是指采用Unicode字符编码的通用字符集。
Unicode具有两种编码方案:
. 用2个字节(16位)编码,被称为UCS-2, Java语言采用;
. 用4个字节(32位)编码,被称为UCS-4;
6,UTF编码 : 衍生编码
有些操作系统不完全支持16位或32位的Unicode字符编码,UTF(UCS Transformation Format)字符编码能够把Unicode字符编码转换为操作系统支持的编码
知识点速记:java使用Unicode编码,java代码都是utf-8编码
数据类型的转化问题:(根据位数判断大小)
大转小:(小的空间放不下大的东西,会丢掉数据,也就是精度丢失问题)
int a = 10l;//不可以,会报错;只能强制转化
int a = (int)10l;//强制类型转化
小转大:(隐式类型转换,默认类型转换)
long b = 10;(10没写,默认int型)
类
1,什么是类
类是一组具有相同属性和行为对象的模板
类是java中一种复杂的数据类型,
2,类的作用是什么
复杂的数据在内容中如果存放,如何操作
知识点速记:类是一个模板,用来存放和操作数据.
3,怎么编写一个类
创建类:在后缀为.java的文件中使用class关键字创建.
class 类名 {
String name;
int age;
}
注意这个类,我没有加pulibc关键字,
测试 一个 .java文件可以写多少类?
一个 .java文件可以写多少个public修饰的类?
public 修饰的类 有啥特殊要求没?
4,怎么使用一个类
类是一个模板,如果要使用的话,是使用模板产生的某一个对象。每个对象都是唯一的。
怎么使用模板产生对象?
使用new 关键字产生对象
eg:
Student stu = new Student();
一个模板可以产生多少个对象?
一个模板可以产生N多对象,每个对象都是不一样的。
每个对象都是某个类的实例
同一个类的所有实例都有相同属性,但属性取值不一事实上相同
同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能
main方法:
1,程序的主入口:
当执行命令 java HelloWorld 的时候就会找HelloWorld这个类中的主方法,程序会从主方法开始向下运行。
2,如果main在public修饰的类中,是没有效果的,没办法找到main类
3,public static void main(String[] args){} 主方法的args 是用来接收参数的。这个参数在执行java HelloWorld命令的时候可以携带。
eg: java HelloWorld 1 tom abc
解释: 执行HelloWorld类中的main方法 并且 把 1 tom abc 三个值传入到main方法参数的args中。
普通方法,声明
public void 方法名(参数列表){
}
普通方法的调用,
这个普通方法位于哪个类中,就需要使用哪个类对象.方法名(参数);进行调用.
public static void main(String[] args){}
static public void main(String[] args){}
前面两个是修饰符,可以换位置
public static void main(String args[]){}
public static void main(String[] aaa){}
public static void main(String... aaa){}
public class Test7{
public static void main(String[] args){
System.out.println(Arrays.toString(args));
}
}
java -cp bin com.briup.ch2.Test7
输出:[]
java -cp bin com.briup.ch2.Test7 tom lisi
输出:[tom, lisi]