Java简介
1)java 特点: 简单, 面向对象, 跨平台, 安全, 支持多线程
2) java 的跨平台
Java 通过JVM(虚拟机) 实现了跨平台技术
Java 源代码(*.java)经过Java的编译器编译成
Java字节码(*.class),执行Java字节码,Java字节码
经过JVM的解释为具体平台的具体指令,并执行。
不同平台(系统)有不同的JVM,主流平台都提供了JVM。所以
JAVA字节码可以在所有平台上能够解释执行。在这个
意义上Java是跨平台的。也就是说:Java 的字节码是跨平台的。
3) Java JDK
JDK java 开发
|-- bin 开发工具(命令:java,javac,jar,javad,jar,rmic,jps...)
|-- jre JRE Java运行环境
|-- lib (rt.jar) Java API(应用编程接口,系统类库)
| (java 提供的现成组件)
|-- bin (java_vm)JVM Java虚拟机
编程习惯介绍:
原则:让别人看的清楚、舒服 Java里面取名应“见名知意”.
大括号对齐
遇到大括号往里缩进(按tab键)
程序块之间加空行
并排语句之间加空格
等号两侧加空格
左大括号前要加空格
成对编程
Java文件中的命名规则
类名首字母要大写
变量名和方法名首字母要小写
运用驼峰表示法(第一个单词首字母小写,其他单词首字母大写)
Java语言的特点:
1 跨平台:一次编译,到处运行(通过JVM实现);
2 简单:简化C++,取消了指针,对指针进行上层的封装,它保证能够通过这个指针(引用),来访问有效的内存单元;
3 纯面向对象的语言,所以的属性、方法都要放在类中;
4 垃圾回收机制,自动垃圾收集,永远不会出现内存泄露的问题。
虚拟机:
Java语言是先编译后解释,java源码是通过编译器编译成java字节码(*.class)的字节码文件,然后再由JVM进行解释运行。
Java环境变量配置(参加工作第一天可能会用上,可以记在自己的笔记上):
Windows下面:
1.JAVA_HOME:指明JDK安装路径
2.PATH:%JAVA_HOME%/bin;C:/Windows;C:/Windows/Command
3. CLASSPATH: set CLASSPATH=%JAVA_HOME%/jre/lib/rt.jar;.
Linux下面:
1.export JAVA_HOME=/usr/local/jdk
2.export PATH=$JAVA_HOME/binPATH
3.export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.
注:windows下分隔符是;而linux下分隔符是:
执行过程中的内存管理
code segment 存放代码
data segment 静态变量、字符串常量
stack 栈 局部变量
heap 堆 new出来的东西
寄存器:处理器内部,由编译器分配,我们没有直接控制权。
标识符:
定义:凡是自己可以取名字的地方都叫标识符,都遵守标识符规则。
1.由字母、下划线“_”、美元符“$”或数字组成
2.以字母,下划线,美元符开头
3.java标识符大小写敏感
4.关键字都是小写英文.
Java关键字: if, public, class, else, while
特殊关键字: goto, const
java中 true, false, null 不是关键字, 是字面量!
JAVA的注释:
1.单行注释//
2.多行注释/* */
3.文档注释/** */
隐式类型转换:
自动类型提升:
A运算符B
A和B中有一个是double,结果就是double;
A和B中有一个是float,结果就是float;
A和B中有一个是long,结果就是long;
同时存在(double>float>long)
除此上之外的情况,结果都是int。
隐式类型转换:
直接量默认数据类型:
int a = 321;
int x = 2147483648; // 错,超出范围
>16 进制直接量,以“0x”开头
int b = 0xFF; // 255
>8 进制直接量,以“0”开头
int c = 0377; // 255
>byte、short、char 用适当的整数(字面量)直接量赋值
byte b = 127;//最大值
short s = 32767;
char c = 65535;//最大值
char x = 65536; // 错,超出范围
>以“L”结尾的整数直接量是 long 类型
long a = 2147483648L;
long x = 2147483648; // 错,不加L默认为int类型
>浮点数数字直接量是 double 类型
double a = 3.14;
double b = 5.26E100;
>在数字直接量后加“D”也表示 double 类型
double b = 3.14D;
double c = 5D;
>在数字直接量后加“F”表示 float 类型
float e = 3.14F;
>Char 类型直接量可以是字符或整数
char a = ‘a’;
char b = ‘啊’;
char c = 97;
char d = ‘\u0061’;//16进制
注意: byte a=1; a=a+2;//错误 a+=2;//正确
变量:
变量:变量是内存中的一小块区域 使用变量名来访问这块区域
因此,每一个变量使用前必须先申明,然后必须进行赋值,才能使用。
成员变量包括实例变量和静态变量
实例变量:
1、在一个类中,任何方法之外定义的变量;
2、从面向对象的思想来说我们又把实例变量看成一个类的属性。
3、实例变量在没有赋初值时系统会自动帮我们做初始化,默认初始化值:
byte short int long 为 0
float double 为 0.0
char 为 ‘\0’
boolean 为 false
引用类型为null
局部变量:
1、在方法内定义的变量叫局部变量。
2、局部变量使用前必须初始化,系统不会自动给局部变量做初始化。
3、局部变量前面只能用final修饰或者不加修饰
4、局部变量的生命范围在他所在的代码块,在重合的作用域范围内不允许两个局部变量命名冲突。
注:局部变量与实例变量允许同名,在局部变量的作用域内,其优先级高于实例变量。
我们可以用this.实例变量名 以区分局部变量。
JAVA中方法的功能及动作:
1) 方法就是函数 例如:y=f(x)=3x+6;
2) 方法的语法
(修饰词)(返回值类型)(方法名)(参数列表){
//方法体
}
public static void main(String[] args){}
例如:
public static int f(int x){
int y = 3 * x + 4;
return y;
}
4) 如果定义了返回值类型 就必须有return语句, 返回结果为
和该返回值类型兼容的数据
5) 方法的参数和方法内部的变量 都是局部变量,变量作用域只在方法内部!
6) 实参: 方法调用时候实际传递的参数变量(具体的值)
形参: 方法的参数定义,是临时变量.(方法的参数列表)
JAVA的运算符:
1.算术运算(+ - * / %)
a)运算的封闭性
i.同种类型参与运算(可能发生自动类型转换)
ii.返回同种类型(可能发生上溢出或下溢出)
iii.Byte/short/char按照int运算
b)整数的运算结果是整数(小数点忽略不计)
c)余数
i.0 对其他数的 余数 是0
ii.n%3 是 周期函数, 函数值 [0,3)
iii.负数的余数是负数(考试可能出现, 工作中很少用)
2.自增(自减)运算 ++ --
a)可以将当前变量自我增加(减少)1
b)i++, 后++, 先将i的值作为整个表达式的值, 然后将i增加1. 就是:Int a=i;i++;
c)++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值. 就是:i++; int a=i;
3.逻辑与比较运算
a)逻辑运算
i.短路运算(遇到不满足情况立即结束) || && 非
ii.非短路运算(执行完全部过程) | &
b)比较运算(比较变量的值,逐位比较)> >= < <= == !=
i.基本类型变量的值就是基本值(int a=1)
ii.引用类型变量的值就是对象地址(引用内存中的一块区域)
4.条件运算符(3元运算符)
语法规则:条件表达式?表达式1:表达式2
当"条件表达式"为true时候, 表达式1作为整个表达式的值,
否则 表达式2作为整个表达式的值
5.移位运算符
运算对象是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。
左移位(<<):左移位 低位补0
右移位:分为无符号和有符号
有符号(>>),若值为正高位补0,值为负高位补1
无符号(>>>),无论值为正负,在高位都补0
其中无符号移位是java新添运算,是c或c++没有的。
注:移位可与等号(<<=或>>=或>>>=)组合使用。此时,运算符左边的值
会移动由右边的值指定的位数,再将得到的结果赋回左边的值。
6.逗号运算符
在java中,唯一用到逗号运算符的就是for循环中,格式如下:
for(int i = 0, j = 1;i < 10 && j != 11;i++, j++)
无论在初始化还是在步进部分,语句都是顺序执行的。此外,尽管初始化部分可设置任意数量的定义,但都属于同一类型。
面向对象:
一. OOP中的基本概念
Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许
设计者将面向对象设计实现为一个可运行的系统。Java的编程单位是类,对象最后要通过类进行实例化(即“创建”)。
二. 抽象数据类型
在java中,我们用class 这个关键字来表示一个类,类是一个抽象的数据类型。
三. 类和对象
面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的
子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。
对象是对问题领域中事件的抽象。对象具有以下特性:
1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。
2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。
3) 对象具有属性和行为。
4) 对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为会改变对象自身的状态,即属性的取值。
例如小张本来体重为40kg,经为减肥后,体重减到45kg.
5) 每个对象都是某个类的实例。小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。
类是具有相同属性和行为的对象的集合。
同一个类的所有实例都有相同属性,但属性取值不一事实上相同,但是它们的状态不一定相同。例如小张和小王都属
于学生类,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。
同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。
类是一组具有相同属性和行为对象的模板。面向对象编程的主要任务就是定义对象模型中的各个类。
1) 类是一种类型:是引用类型;
2) 类是元数据: 描述数据的数据,数据在面向对象领域里以对象的形式存在,类是对象共有属性和方法的抽象描述。
Java程序是各种对象相互交互作用、而不是类。
四. 定义方法形式
接下来我们来看一下类中定义的方法的格式。
修饰符 返回类型 方法名(参数列表)
1) 必须有返回值,如果方法没有返回值,必须用void申明返回类型。
2) 构造器没有返回类型。
五. 参数传递
参数传递分为两种:
1) 对于基本数据类型,参数通过值传递。
2) 对于类类型,参数通过引用(对象的引用)传递。
3) 只有引用传递的内容能被改变,而按值传递不会变化。
六. this关键字
在方法调用、参数传递过程中,极有可能出现参数名称与实例变量名同时的情况。在一个方法内,可以定义和成员变量同名的局
部变量或参数,此时成员变量被屏蔽。
七. 数据隐藏
那如何对属性进行隐藏呢?
在前面用private修饰,表示该属性不能被其它类访问和修改,它只能被本类访问和修改,范围限制在本类内。
八. 封装
另一个方面就是让实现细节不可见(方法(行为)实现的具体细节隐藏。)
那如何去访问那些private的属性呢?
提供一个统一的接口给所有的用户,用户只有通过这个接口来访问。
可以提高可维护性。
封装:在属性(实例变量)前加private, 然后通过统一的方法访问以及修改这些属性值的实现过程;
注意:1) 实现封装的关键在于绝不让其它类访问该类的实例字段。
2) 提供一个统一的接口给所有的用户,用户只有通过这个接口来访问。
九. 方法重载
有时侯,类的同一种功能有多种实现方式,有很多相同名称的方法,参数不同。这给用户对这种功能的调用使用提供了
很大的灵活性。
对于类的方法(包括从父类中继承的方法), 如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载
方法。这种现象叫重载。
重载必须满足以下条件:
1) 方法名称相同。
2) 参数不同(参数类型、个数和顺序)。
3) 返回类型可以不相同。
在一个类中不允许定义两个方法名相同,并且参数签名也完全相同的方法。因为假如存在这样的两个方法,Java虚拟机在运行时就无法
决定到底执行哪个方法。参数签名是指参数的类型、个数和顺序。
图解面向对象: