Java基础
Java基础知识
Java语言的特点
面向对象的思想编程
跨平台性
安全性
JDK :开发环境
JRE:运行环境
JVM:Java虚拟机
配置环境变量:JAVA_HOME=目录
修改path:%JAVA_HOME%\bin
初识java
注释:▪ 注释就是程序员为读者作的说明,是提高程序可读性的一种手段
– 类型
▪ // 单行注释 注释内容从//到本行结尾
▪ /* */ 多行注释 /* */ 注释不能嵌套
▪ /** */文档注释 可以通过JDK提供的Javadoc命令,生成程序的
– 注意
▪ 注释不会出现在字节码文件中。
即Java编译器编译时会
跳过注释语句
反编译工具:▪ 编译
– 源代码----->class
▪ 反编译
– class---->源代码
▪ 反编译软件
– jd-gui.exe
▪ 因为编译的时候不会对注释进行处理,所以反编译时不可能得到注释
数据类型和运算符
标识符Identifier
▪ 作用
– 常量、变量、方法、类和包等的名称
▪ 命名规则
– 必须以字母、_下划线、美元符$开头。
– 其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合
– 大小写敏感,长度无限制。
– 不可以是Java的关键字。
正确的:
name, Name,user_name ,$name , _name,
publicName;
▪ 注意 错误的:
– Java不采用通常语言使用的ASCII字符集 9username ,user name , public
– Java采用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉
字等等。(不建议大家使用汉字来定义标识符!)
数据类型:
基本数据类型:
整数型: 整数类型:byte。short。int。long
浮点类型:float。double
字符型:char
布尔类型:boolean
引用数据 类型:
类class
接口interface
数组
▪ Java 语言支持如下运算符:
–
–
–
–
–
–
–
算术运算符: +,-,*,/,%,++,--
赋值运算符 =
扩展赋值运算符:+=,-=,*=,/=
关系运算符: >,<,>=,<=,==,!=
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符 ?:
基本数据类型之间的转换
– =右侧:所有变量先转换为字节数最多的数据类型,再计算
– =两侧:左侧宽度>右侧宽度 自动转换
左侧宽度<右侧宽度 强制转换
低位像高位 转换(自动转换)高位像低位转换(强制转换)
常量和变量
▪ 常量变量定义
– 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在
程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
流程控制语句
选择结构
if-else多分支选择结构
▪ if(布尔表达式1) {
– 语句块1;
int age = (int) (100 * Math.random());
System.out.print(“年龄是”+ age + “, 属于”);
if (age < 15) {
▪ } else if(布尔表达式2) {
– 语句块2;
System.out.println(“儿童, 喜欢玩!”);
} else if (age < 25) {
▪ }………
System.out.println(“青年, 要学习!”);
} else if (age < 45) {
System.out.println(“中年, 要工作!”);
} else if (age < 65) {
System.out.println(“中老年, 要补钙!”);
} else if (age < 85) {
▪ else if(布尔表达式n){
– 语句块n;
▪ } else {
– 语句块n+1;
System.out.println(“老年, 多运动!”); ▪ }
} else {
}
▪ 逐条if语句进行判断
– 条件匹配,进入语句体
– 否则对if语句继续匹配
System.out.println(“老寿星, 古来稀!”);
switch多值选择结构
char c = ‘a’;
int rand =(int) (26*Math.random());
char c2 = (char)(c+rand);
System.out.print(c2 + “: ”);
switch (c2) {
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
System.out.println(“元音”); break;
case ‘y’:
case ‘w’:
System.out.println(“半元音”); break;
System.out.println(“辅音”);
default:
}
循环
while循环
public class WhileTest {
public static void main(String[] args) {
int i = 0;
int sum = 0;
while (i <= 100) {
sum += i; //sum = sum+i;
i++;
}
System.out.println("Sum= " + sum);
}
}
循环结构都由如下四个结构组成:
初始化、条件判断、循环体、迭代
do-while循环
▪ do-while:
int a = 0;
while(a<0){ – 先执行,后判断。
System.out.println(a);
a++;
▪ while:
– 先判断,后执行。 }
System.out.println(“-----”);
a=0;
do{
System.out.println(a);
a++;
} while (a<0);
for循环:for(int i=0;i<100 ;i++){
System.out.println("好好学习!");}
跳转语句---break和continue
▪ 在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,
并执行循环中剩余的语句。(break语句还可用于多支语句switch中)
▪ continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行
的语句,接着进行下一次是否执行循环的判定。
break可用于switch结构和循环结构中
– continue叧能用于循环结构中
递归算法
数组
一堆数组
①数组定义、特点、内存分配
②使用一维数组存储数据
③for-each循环
数据类型[ ] 数组名 = new 数据类型[大小] ;
一维数组的应用
①查询元素
②数组类型做形参
③查询最大值最小值
④添加元素或删除元素
⑤冒泡排序
⑥Arrays工具类
⑦理解main(String args[])
⑧可变参数
二堆数组
二维数组含义、特点、内存分配、举例
int [][] a= {{1,2},{3,4,5,6},{7,8,9}};
注:可以用for循环执行数组里的所有单位
面向对象编程
类和对象:在现实生活中现有对象在有类而在Java语言中是现有类在有对象
对象的特征——属性
对象的特征——方法
▪ 方法——对象执行的操作
局部变量和成员变量
局部变量和成员变量
▪ 区别
– 声明位置不同 类中 方法中
– 作用范围不同: 当前类的方法 当前方法
▪ 不同的方法中即使有同名的局部变量,没有关系,互不影响,建议相同
– 内存存放的位置的:栈内存中 堆内存中
– 成员变量有默认值;局部变量没有默认值
注:在方法中的变量称为局部变量;在方法外类内的变量称为成员变量
构造方法(构造器)
构造器作用:
– 为对象进行初始化(成员变量)工作。
▪ 构造器是一种特殊的方法:
– 构造器的方法名必须和类名一致!
– 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构 造器里调用return。
– 通过new关键字调用!!
– 如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义则 编译器不会添加无参数构造方法!
– 和普通方法一样,构造方法也可以重载
方法的调用
方法调用
▪ 形参和实参
– 定义方法的参数是形式参数
– 调用方法的参数是实在参数
– 调用方法时要求参数个数相同,类型兼容
▪ 参数传递
– 基本数据类型的参数传递
▪ 无法通过方法调用改变变量的值
– 引用数据类型的参数传递
▪ 可以通过方法调用改变变量的值
面向对象三大特征:封装。继承。多态。
面向对象编程02
this关键字
▪ this的作用:
– this表示的是当前对象本身,
– 更准确地说,this代表当前对象的一个引用。
▪ 普通方法中使用this。
– 区分类成员属性和方法的形参.
– 调用当前对象的其他方法(可以省略)
– 位置:任意
▪ 构造方法中使用this。
– 使用this来调用其它构造方法
– 位置:必须是第一条语句
▪ this不能用于static方法
子主题 7
static关键字
static关键字
▪ 使用static声明的成员变量称为静态变量,
▪ 使用static声明的方法称为静态方法
▪ 静态变量不静态方法又称为类变量和类方法
static关键字
▪ 静态属性的访问形式
– (1)对象名.属性
– (2)类名.属性
▪ 静态方法
– 访问修饰符 static 返回值类型 方法名(){}
▪ 访问形式
– (1)对象名.方法名();
– (2)类名.方法名();
代码块
代码块
▪ 概念:使用”{}”括起来的一段代码
▪ 分类:根据位置可分类
▪ 普通代码块直接在方法或语句中定义的代码块
▪ 构造代码块直接写在类中的代码块
▪ 静态代码块使用static声明的代码块
▪ 同步代码块多线程的时候会学到
静态初始化块
▪ 如果希望加载后,对整个类进行某些初始化操作,可以使用
static初始化块。
▪ 类第一次被载入时先执行static代码块;类多次载入时,static代
码块只执行一次;static经常用来进行static变量的初始化。
▪ 是在类初始化时执行,不是在创建对象时执行。
▪ 静态初始化块中不能访问非static成员。
package
pakage
▪ 为什么需要package?
– 为了解决类之间的重名问题。
– 为了便于管理类:合适的类位于合适的包!
▪ package怎么用?
– 通常是类的第一句非注释性语句。
– 包名:域名倒着写即可,再加上模块名,并不内部管理类。
▪ 注意事项:
▪ 写项目时都要加包,不要使用默认包。
▪ com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是
逡辑上看起来后者是前者的一部分。
JDK中的主要包
java.lang
包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图
形用户界面(GUI)。
java.net
包含执行不网络相关的操作的类。
java.io
包含能提供多种输入/输出功能的类。
java.util
包含一些实用工具类,如定义系统特性、使用不日期日历相关的函数
import
封装
▪ 封装的步骤
修改属性的可见性 ----- 设为private
||(向下箭头)
创建公有的getter/setter方法----用于属性的读写
||
在getter/setter方法中加 ------- 对属性值的合法性进行判断
入属性控制语句
面向对象04
继承
继承
▪ 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实
世界更好的建模。
▪ 提高代码的复用性!
▪ extands的意思是“扩展”
。子类是父类的扩展
▪ 不同的叫法:超类、父类、基类、子类、派生类
使用继承
– 编写父类
class Pet {
//公共的属性和方法
}
class Dog extends Pet {
//子类特有的属性和方法
}
▪ 编写子类,继承父类
class Penguin extends Pet{}
super关键字
super关键字
▪super是直接父类对象的引用。
▪可以通过super来访问父类中被子类覆盖的方法或属性。
▪普通方法:
▪没有顺序限制。可以随便调用。
▪构造函数中:
▪任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么
Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加
都无所谓
方法重写(override)
方法的重写(override)
▪ 在子类中可以根据需要对从基类中继承来的方法进行重写。
▪ 重写方法必须和被重写方法具有相同方法名称、参数列表和返回
类型。
▪ 重写方法不能使用比被重写方法更严格的访问权限。(由于多态
抽象类
Java中使用抽象类,限制实例化
public abstract class Pet {
}
抽象方法
▪ abstract也可用于方法——抽象方法
▪ 抽象方法没有方法体
– 抽象方法必须在抽象类里
– 抽象方法必须在子类中被实现,除非子类是抽象类
public abstract void print();------没有方法体
final的用法
被final修饰的类和方法不能被继承和重写被修饰的变量不可以在改变
面向对象05
多态
子主题 1