一、Java特性
JAVA简单,面向对象编程语言,不依赖平台,被编译被解释,健壮性,垃圾回收机制,多线程,分布式,安全
二、Java架构
源文件–>编译器–>类文件–>JVM–>操作系统和硬件–>输出
1、源文件:
Java应用程序包含源代码,该代码保存在扩展名为.Java的源文件中。
2、类文件:
编译为生成.class文件的.java文件包含字节码。此文件由支持JRE的任何计算机执行。
3、JDK,JRE,JVM的概念:
JDK(Java Development Kit,Java开发工具包) ,是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库,包含JVM标准实现及Java核心类库。
JRE(Java Runtime Environment Java运行环境) ,是 JDK 的子集,也就是包括 JRE 所有内容,以及开发应用程序所需的编译器和调试器等工具。
JVM(Java Virtual Machine,Java虚拟机), 是JRE的一部分。它是整个Java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行Java字节码文件的虚拟计算机。
4、JDK JRE JVM区别和联系:
JDK=Java开发工具+JRE
JRE=JVM+Java类库
JDK 用于开发,JRE 用于运行Java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK。
JDK包含JRE,JDK 和 JRE 中都包含 JVM。
JVM 是 Java 编程语言的核心并且具有平台独立性。
三、Java变量
1、规范
变量名的开头必须是:英文字母、下划线、符号。
其余部分内容可以是:英文字母、下划线 、符号、数字。
规范的变量名以小写字母开头。
不能使用Java关键字作为变量名,例如:public、static、do、while、for、void等。
2、定义
数据类型 变量名 = 值
四、数据类型
1、基本数据类型
基本数据类型是CPU可以直接进行运算的数据类型。
java中定义了以下8种基本数据类型:
1)数值型:
a)整数类型:byte(1个字节),short(2个字节),int(4个字节),long(8个字节)
b)浮点数类型:float(4个字节),double(8个字节)
2)非数值型:
a)字符类型:char(2个字节)
b)布尔类型:boolean
2、引用类型
除了上述8种基本数据类型以外,其余类型均为“引用数据类型”,最常见的引用数据类型是String字符串,Array数组。
五、Java注释
有三种注释:单行注释,多行注释与文档注释
1、单行注释 //
,最常用的注释,其注释内容从 //
开始到本行结尾。
2、多行注释 从 /*
开始直至第一个 */
出现都属于多行注释,但多行注释不能嵌套,多行注释也可以注释掉不需要的代码
3、文档注释 可以自动地生成文档,可以用javadoc命令生成html,这种注释以 /**
开始,以 */
结束
/**
* 这就是传说中的文档注释
* @author 作者方艺璇
* 可以自动生成文档
*/
public class Hello{
public static void main(String[] args){
//这是单行注释,一行结束
System.out.println("你好");
/*多行注释开始
System.out.println("你好");
System.out.println("你好");
这里都是多行注释
结束
*/
}
}
六、Java类型转换
1、介绍
Java 中的类型强制转换(Type Casting)可以分为基本类型(primitive types)的强制转换和引用类型(reference types)的强制转换。它们在底层的原理和实现有所不同。
2、基本类型的强制转换
基本类型的强制转换涉及数值类型(如 int, float, double)之间的转换。基本类型的转换分为两类:自动类型转换(Widening Casting)和强制类型转换(Narrowing Casting)
1)自动类型转换(Widening Casting)
自动类型转换是将一个较小范围的基本类型转换为较大范围的基本类型。这种转换是自动进行的,不需要显式的强制转换操作符
int i = 100;
long l = i; // 自动类型转换
double d = l; // 自动类型转换
底层原理:
在自动类型转换中,Java 编译器会在编译时检查转换是否合法,并在运行时进行必要的数值扩展。例如,将 int 转换为 long 时,Java 会将 int 值扩展为 long 值
2)强制类型转换(Narrowing Casting)
强制类型转换是将一个较大范围的基本类型转换为较小范围的基本类型。这种转换需要显式地使用强制转换操作符
double d = 100.04;
long l = (long) d; // 强制类型转换
int i = (int) l; // 强制类型转换
底层原理:
在强制类型转换中,Java 编译器同样会在编译时检查转换是否合法。在运行时,Java 会进行数值截断或舍入。例如,将 double 转换为 int 时,小数部分会被截断
3、引用类型的强制转换
引用类型的强制转换涉及类和接口之间的转换。
主要分为向上转型(Upcasting)和向下转型(Downcasting),后面再学
七、Java操作符
1、算术运算符
算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)
加法运算:+
减法运算:-
乘法运算:*
除法运算:/,(另外,整型之间的除法运算是整除,这也就意味着2 / 4的结果为0,如果我们想像数学一样得到一个小数,可以使用浮点类型的操作数。)
取模运算:%(要求两个整型数字相除取余数)
2、自增(++)、自减(- -)运算符
++ 或 - - 是单目运算符,放在操作数的前面或后面都是允许的。
++运算,变量自增长1;- -运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
1、++/- -在先,先运算后取值
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
前++/- -时,就相当于变量a先自增1,再把值赋给b;
2、++/- -在后,先取值后运算
int a = 1;
int b = a++; //这就等价于 int b=a;a=a+1;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
后++/- -时,就相当于变量a先把值赋给b,再自增1;
3、赋值运算符
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,例如 int a=2.
它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。
记住在Java中两个数相等用的符号是==,而=是赋值运算符。
例如 int a=1,int b=1,如果表示a等于b,则是a==b
4、关系运算符
关系运算符用来比较两个值的关系。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
相等:==(如果判断正确结果为true)
小于号:<
大于号:>
小于等于:<=
大于等于:>=
不等于:!=
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false
public static void main(String[] args) {
System.out.println(1==1);//true
System.out.println(1<2);//true
System.out.println(3>4);//false
System.out.println(3<=4);//true
System.out.println(3>=4);//false
System.out.println(3!=4);//true
}
5、逻辑运算符
&& 和运算
|| 或运算
!否运算
其实也就是数学里面学到的逻辑运算:与、或、非
//逻辑与&&(并且) 一假即假,全真才是真
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
//逻辑或||(或者)一真即真,全假才是假
System.out.println(false || false);//falase
System.out.println(false || true);//true
System.out.println(true || false);//true
//逻辑非!(取对立)
System.out.println(!false);//true
6、三元运算符
我们都接触过考试,一般都是60分及格。
也就是说分数大于或等于60时,及格;分数小于60时,不及格。
这种在生活中常见的情况在程序里是如何表现的的?
这就需要三元运算符了。
当一个布尔表达式的结果分别对应两种情况时,可以使用三元表达式。
该运算符由三个操作数组成,用于判断布尔表达式。它的目的是确定应将哪个值分配给变量。条件运算符的语法为:
变量 = (布尔表达式) ? 值1 : 值2
7、instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
下面是一个例子:
String name = "Agatha";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
八、public static void main(String[ ] args) 是什么意思?
这是 Java 程序的入口地址,Java 虚拟机运行程序的时候首先找的就是 main 方法,也叫主方法。跟 C 语言里面的 main() 函数的作用是一样的。只有 main() 方法 Java 程序才能够被 Java 虚拟机运行,main 是一个程序的入口,一个 java 程序运行必须有且仅有一个 main 方法;可理解为规定的格式。
对于上图的参数及修饰符:
public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样 Java 虚拟机就可以找到 main() 方法,从而来运行 javac 程序。
static: 表明方法是静态的,属于类本身,而不是类的实例(不依赖类的对象,是属于类的),在类加载的时候 main() 方法也随着加载到内存中去。
void: 方法是不需要(无)返回值的。
main:主程序,约定俗成,规定的;main() 方法是 Java 应用程序开始执行的地方(入口)。
String[ ] args:传递给 main() 方法的参数,它是一个字符串数组,用于从控制台(命令行)接收参数。
九、类?对象?方法?属性?
1、对象和属性概念
身边看得见摸得着的物件都称之为对象
每个对象都有各自的静态的行为(特征),在计算机中称之为属性,每个属性都有两个部分组成:属性名和属性值
每个对象都有各自的动态的行为(方法),在计算机中称之为方法,每个方法都有两个部分组成:方法名称,方法体
比如:
玩具狮子是一个对象
静态的属性:
颜色:黄色(属性名:属性值)
动态的行为(方法):
叫:大叫(方法名;方法体)
玩:篮球(方法名;方法体)
2、类概念
1) 类的定义
(1)多个对象之间的共同的特征(静态的属性和动态的方法)
(2)共同的特征称之为类
(3)类就是具备多个对象之间的共性
2) 类和对象的关系
(1)类是对象的抽象(模糊泛化),对象是类的实例(具体)
(2)如果A和B的关系符合A is B,得出结论A是对象,B是类
坦克是武器,坦克是对象,武器是类;张三是人,张三是对象,人是类
3、创建类
public class 类名{
}
4、创建方法
public void 方法名()
{
···方法体···
}
public 返回值类型 方法名()
{
···方法体···
Return 返回值;
}
5、创建对象
创建对象的过程也是将类实例化的过程
类名 对象名=new 类名();
6、类、对象、方法
实现这个例子:
玩具狮子类中
玩具狮子是一个对象
静态的属性:
颜色:黄色(属性名:属性值)
动态的行为(方法):
叫:大叫(方法名;方法体)
玩:篮球(方法名;方法体)
public class AutoLion { //定义一个类名字为AutoLion
String color; //定义一个变量color
public void run(){ //定义一个方法run
System.out.println("速度为:1km/h"); //方法体为打印此内容
}
public void shout(){ //定义一个方法shout
String sound="大声吼叫"; //方法体1,定义赋值sound变量为大叫
System.out.println("声音为:"+sound); //方法体2,打印调用sound变量
}
public String robBall(){ //定义一个需要返回值的String方法robBall
String ball="篮球"; //方法体1,定义赋值变量ball为篮球
System.out.println("可以玩:"+ball); //方法体2,打印调用ball变量
return ball; //返回ball
}
public static void main(String[] args) { //主方法
System.out.println("电动玩具狮子特征");
AutoLion autoLion = new AutoLion(); //定义一个AutoLine类的对象 取名 autoline
autoLion.color="黄色"; //对象属性color赋值黄色
System.out.println("颜色为:"+ autoLion.color); //对象属性值获取
autoLion.run(); //对象方法调用
autoLion.shout(); //对象方法调用
autoLion.robBall(); //对象方法调用
}
}