1.1、Java特新和优点
- 简单性
- 面向对象
- 可移植性
- 高性能
- 分布式
- 动态性
- 多线程
- 安全性
- 健壮性
1.2、Java三大版本
- JavaSE : 标准版 (桌面程序,控制台开发…)
- JavaME : 嵌入式开发 (手机,小家电…)
- JavaEE : E企业级开发 (Web端,服务器开发…)
1.3、JDK、JRE、JVM
- JDK
jdk是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等. - JRE
jre包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等. - JVM
jvm是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
1.4、JDK的卸载
- 删除java的安装目录
- 删除环境变量JAVA_HOME
- 删除path下关于java的目录
- 检查是否删除成功: java -version
1.5、JDK的下载
- 环境变量的配置
- 我的电脑–>右键->属性
- 环境变量–>JAVA_HOME ->C:\Program Files\Java\jdk1.8.0_191
- 配置path变量 ->%JAVA_HOME%\bin
- 检查是否安装成功:java -version
1.6、IDEA的下载与安装
2.1、Java的数据类型
- 基本类型
- ①数值类型
- (1)整数类型
- byte:占1个字节(-128-127)
- shot:占2个字节()(-32768-32767)
- int:占4个字节()(-2147483648-2147483647)
- long:占8个字节(-9223372036854775808-9223372036854775807)(后面要加L)
- (2)浮点类型
- float:占4个字节(后面要加F)
- double:占8个字节
- (3)字符类型
- char:占8个字节
- (1)整数类型
- ②boolean类型:占1位其值只有true和false两个
- ①数值类型
- 引用类型
- 类
- 接口
- 数组
2.2、字节
- 位(bit):是计算机内部储存的最小单位
- 字节(byte):是计算机中数据处理的基本单位,习惯用大写B来表示
- 1B(byte,字节)=8bit(位)
- 字符:是计算机中使用的字母、数字和符号
- 1bit表示1位
- 1Byte表示一个字节 1B=8b
- 1024B=1kB
- 1024KB=1M
- 1024M=1G
2.3、变量
- 类变量
- 实例变量
- 局部变量
public class Variable{
//类变量
static double salary=2500;
String name; //实例变量,从属于对象 :
//如果不自行初始化,这个类型的默认值为 0 0.0
//布尔值:默认为flase
//除了基本类型,其余的默认值都是null
public static void main(String[] args){
//局部变量(必须声明和初始化值)
int i=10;
//实例变量
Variable variable=new Variable();
System.out.println(variable.name);
//类变量
System.out.println( salary);
}
public void add(){
}
}
2.4、常量
- 常量:初始化后不能再改变值!不会变动的值
- 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不予以被改变
- 常量一般使用大写字符
public class Demo {
//修饰符,不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
3、Scanner对象
- 用户获取用户的输入
- 基本语法:
Scanner s = new Scanner(System.in);
- 常用方法:
- next():
- 对输入有效字符遇到的空白,next()方法会自动将其去掉
- next()不能得到带有空格的字符串
- nextLine();
- nextLine()方法返回的是输入回车之前的所有字符
- 可以获取空白
- next():
4、循环结构练习题
- 计算0到100之间的奇数和偶数的和
public class Demo {
public static void main(String[] args) {
int oddSum=0;
int evenSum=0;
for (int i = 0; i <=100; i++) {
if (i%2!=0){
oddSum+=i;
}else {
evenSum+=i;
}
}
System.out.println("奇数的和:"+oddSum);
System.out.println("偶数的和:"+evenSum);
}
}
- 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
public class Demo {
public static void main(String[] args) {
for (int i = 0; i <=1000 ; i++) {
if (i%5==0){
System.out.print(i+"\t");
}
if (i%(5*3)==0){
System.out.println();
}
}
}
}
- 打印九九乘法表
public class Demo {
public static void main(String[] args) {
for (int j = 1; j <=9; j++) {
for (int i = 1; i <=j; i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
- 输出三角形
public class Demo {
public static void main(String[] args) {
for (int i = 0; i <=5 ; i++) {
for (int j = 5; j >=i ; j--) {
System.out.print(" ");
}
for (int j = 0; j <=i; j++) {
System.out.print("*");
}
for (int j = 0; j <i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
4.1、循环结构+方法练习题
要求:
1.写四个方法:加减乘除
2.利用循环+switch进行用户交互
3.传递需要操作的两个数
4.输出结果
public class 计算器 {
public static void main(String[] args){
while(true) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入q继续:");
String str = scanner.next();
if (str.equals("q")) {
System.out.print("请输入第一个数字");
float numb1 = scanner.nextFloat();
System.out.print("请输入运算符号");
String operator = scanner.next();
System.out.print("请输入第二个数字");
float numb2 = scanner.nextFloat();
switch (operator) {
case "+":
add(numb1, numb2);
break;
case "-":
subtract(numb1, numb2);
break;
case "*":
multiply(numb1, numb2);
break;
case "/":
divide(numb1, numb2);
break;
}
} else {
System.out.println("正在退出!!");
break;
}
}
}
public static void add (float a,float b){
System.out.println(a+"+"+b+"="+(a+b));
}
public static void subtract (float a,float b){
System.out.println(a+"-"+b+"="+(a-b));
}
public static void multiply (float a,float b){
System.out.println(a+"*"+b+"="+a*b);
}
public static void divide (float a,float b){
System.out.println(a+"/"+b+"="+a/b);
}
}
5、数组的声明创建
- 声明数组变量的语法创建
int [] array;
array= new int[10];
- 使用new操作符来创建数组
int[] array = new int[10];
- 求数组中元素的和
public class ShuZu {
public static void main(String[] args) {
int[] array = new int[10];
int sum=0;
array[0]=12;
array[1]=23;
for (int i = 0; i < array.length; i++) {
sum+=array[i];
}
System.out.println(sum);
}
}
- 数组的长度
array.length
- 静态初始化
int [] a={1,2,3,4};
- 动态初始化
int[] b =new int[2];
int[0]=12;
5.1、二维数组
- 二维数组的声明
int[][] array = {{1,2},{2,3},{3,4},{4,5}};
- 二维数组的遍历
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
5.2、数组中的Arrays类常用方法
- 元素的遍历
int[] a={1,34,23,3,56};
System.out.println(Arrays.toString(a));
- 数组元素从小到大排序
int[] a={1,34,23,3,56};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
5.3、冒泡排序:时间复杂度为O(n2)
- 比较数组中,两个相邻的元素,如果第一个比第二个大,就交换他们的位置
- 每一次比较,都会产生一个最大,或者最小的数字
- 下一轮则可以少一轮排序
- 依次循环,直到结束
public class MaoPao {
public static void main(String[] args) {
int [] array={1,45,34,76,123,43};
int[] sort = sort(array);
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
//临时变量
int temp=0;
//外层循环,判断要走多少次
for (int i = 0; i < array.length; i++) {
//内层循环,比较两个数,如果第一个数,比第二个数大,则交换位置
for (int j = 0; j < array.length-1-i; j++) {
if (array[j+1]<array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
}
6、面向对象
- 面向对象编程(OOP)
- 本质:以类的方式组织代码,以对象的组织(封装)数据
- 抽象
- 三大特性:
- 封装
- 继承
- 多态
6.1、super
- super 调用父类的构造方法,必须在构造方法的第一个
- super 必须只能出现在子类的方法或者构造器中
- super 和 this 不能同时调用构造方法
6.2、super与this的对比
- 代表的对象不同:
- this:本身调用者这个对象
- super:代表父类对象的引用
- 前提:
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
- 构造方法:
- this():本类的构造
- super():父类的构造
6.3、多态
- 即同一方法可以根据发送对象的不同而采用不同的行为方式
- 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多
- 多态存在的条件
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类的对象
- 注意:多态是方法的多态,属性没有多态性
- instanceof 类型转换(引用类型)
public class Person {
public void run(){
System.out.println("run");
}
}
public class Student extends Person{
@Override
public void run() {
System.out.println("son");
}
}
Student s1=new Student();
//Person父类型,可以指向子类,但不能调用子类独有方法
Person s2=new Student();
Object s3=new Student();
s1.run(); //输出son
//对象能执行哪些方法,主要看对象左边的类型
s2.run();//子类重写了父类的方法,执行子类的方法,输出son,若没重写则输出run
6.4、抽象类
- 不能new这个抽象类,只能靠子类去实现它:约束!
- 抽象类中可以写普通的方法
- 抽象方法必须在抽象类中
- abstract,抽象方法,只有方法名字,没有方法的实现!
- 单继承
- 有构造函数
- 能定义变量
- 可以包含静态方法
public abstract class ChouXiangLei {
public abstract void doSomeThing();
public void sum(){
System.out.println("sum");
}
}
6.5、接口
- 接口中的所有定义其实现都是抽象的 public abstract
- 实现了(implements)接口的类就必须要重写其方法
- 接口中没有变量,所有定义的属性都是常量 public static final
- 可以实现多个接口
- 没有构造函数
- 不能包含静态方法
public interface JieKou {
int AGF=99;
void run(String name);
}
7、异常(Throwable)
-
Error(错误)
-
Exception(异常)
- IOException
- RuntimeException
- NullPointerException(空指针异常)
- ArrayIndexOutOfBoundsException(数组下标越界异常)
- ClassNotFoundException(找不到类)