目录
java程序的运行机制和JVM
面对对象程序设计简介
Arrays类的常用方法
定义类
数据类型分类
基本类型的类型转换
foreach循环
java程序的运行机制和JVM
由java语言编写的程序需要经过编译步骤,但这个编译步骤不会生成特定平台的机器码,而是生成一种与平台无关的字节码(*class文件)必须使用java解释器来解释执行
java源文件->javac->字节码文件->java->特定平台的机器码
java虚拟机 负责解释执行字节码(JVM) 不同平台的JVM不同,但都是相同的接口
面对对象程序设计简介
基本思想:使用类、对象、继承、封装、消息等基本概念进行程序设计
采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物
成员变量(状态数据)+方法(行为)=类定义
程序单位:
面向对象:类
面向过程:函数
面向对象的基本特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)
封装:将对象的实现细节隐藏,通过一些公用的方法来暴露该对象的功能
继承:是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
多态:多态性是指允许不同软件元素对同一消息作出响应
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
对象的基本特征:标识唯一性、分类性、多态性、封装性、模块独好性
类是具有共同属性、共同方法的一类事物
(类是对象的抽象,对象是类的实例)
Arrays类的常用方法
位于 java.util 包中,主要包含了操作数组的各种方法。
import java.util.Arrays;
比较数组,赋值,截取、输出
import java.util.Arrays;
public class ArrayText
{
public static void main(String[] args)
{
//java中定义数组常用type[] arrayName来表示
int[]a = new int[]{3,4,5,6};
int[]a2 = new int[]{3,4,5,6};
//Arrays.equals(a,a2) 若a,a2数组长度、每个元素依次相等则输出true
System.out.println("数组a和数组a2是否相等:"+ Arrays.equals(a,a2));
//Arrays.copyOf(a,6) 复制a数组,生成一个新的b数组
int[]b = Arrays.copyOf(a,6);
System.out.println("数组a和数组b是否相等:"+ Arrays.equals(a,b));
//Arrays.toString(b) 输出b数组{3,4,5,6,0,0}
System.out.println("b数组的元素为:"+Arrays.toString(b));
//将b数组的第3个元素(包括)到第五个元素(不包括)赋值为1,得到{3,4,1,1,0,0}
Arrays.fill(b,2,4,1);
Arrays.sort(b);//对b进行排序 得到{0,0,1,1,3,4}
System.out.println("b数组的元素为:"+Arrays.toString(b));
}
}
定义类
1.定义类的简单语法:
修饰符可以省略,也可以是public、final、abstract
//java中各类修饰符总结
[修饰符] class 类名
{
零到多个构造器定义...
零到多个成员变量...
零到多个方法...
}
2.定义方法的语法格式:
修饰符可以省略,也可以是public、protected、private(三者只能出现其一)static、final、abstract(两者只能出现其一)。它们可以与static组合起来修饰方法
[修饰符] 方法返回值类型 方法名(形参列表)
{
//由零条到多条可执行性语句组成的方法体
}
方法的所属性:不能独立存在,必须属于类或对象
方法的参数传递机制:值传递
方法重写(复写/覆盖):
在子类父类关系中有一模一样的方法。
方法重写的注意事项:
1).@Override:注解,起到标记提示的作用写在方法上面,起到检测方法是否正确覆盖如果没有就报红提示,其实就算不写,如果方法没问题也能完成对父类相同方法的覆盖
2).重写方法的返回值类型的范围,必须【小于等于】父类返回值类型的范围
3).重写方法的权限修饰符的范围,必须【大于等于】
父类返回值类型的范围
public > protected > 默认的(default不用写出来) > private1
【小结:实际运用方法重写,只需要和父类写得一模一样就可以了】
方法重写的好处:既能保证父类的方法不变,子类也可以根据自己的需求做不同的实现。
3.定义构造器的语法格式:
修饰符可以省略,也可以是public、final、abstract
构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或者使用void声明构造器没有返回值,编译时不会出错,但Java会把这个所谓的构造器当成方法来处理——它就不再是构造器
[修饰符] 构造器名(形参列表)
{
//由零到多条可执行性语句组成的构造器执行体
}
数据类型分类
java语言是强类型语言
强类型语言的特点:
1.所有变量必须先声明,后使用
2.指定类型的变量只能接受类型与之匹配的值
基本类型的类型转换
自动类型转换
强制类型转换(也叫缩小转换)
格式:(targetType)value 可能造成数组丢失
foreach循环
优点:无需获得数组和集合长度,无需根据索引来访问数组元素和集合元素,自动遍历数组和集合的每个元素
格式:
for(type variableName:array|clloection)
{
//variableName//自动迭代访问每个元素
}
foreach语句的局限性
通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍
总结
foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用
this和super的用法总结
super:引用父类对象
super.成员变量 调用父类的成员变量(用来访问父类被隐藏的成员变量即就是private关键字修饰的成员变量只能被间接访问)
super.成员方法 调用父类的成员方法(调用父类中被重载的方法)
super() 调用父类的空参构造器
super(参数) 调用父类的有参构造器
this:访问(调用)当前类的对象
this.成员变量 访问当前类的成员变量this.成员方法 调用当前类的成员方法
this() 访问当前类的空参构造器
this(参数) 访问当前类的有参构造器
注意:不管是 this()、 super() 还是 this(参数)、 super(参数) 只能写在构造方法的第一语句即super()和this的用法一样的在构造方法中:都必须得是第一行,所以二者不可共存
super用法注意:在子类的构造方法中调用父类构造方法只能访问一次即子类中:不能同时存在super(),和super(参数)两条语句
Scanner类
Scanner是用于做键盘录入的类
1.在java.util包下,需要导包
import java.util.Scanner;
注意: 写在类名的上面
2.创建Scanner对象
Scanner sc=new Scanner(System.in);
3.获取键盘录入数据,通过对象调用Scanner类提供的nextInt()方法实现键盘录入一个int类型的数值int num=sc.nextInt();
获取键盘录入的int数据,(因为nextInt方法返回的是一个int类型的结果所以要用int类型的变量来接收)
int num1 = sc.nextDouble();
获取键盘录入的double类型的数据
String str=sc.next();
获取键盘录入的字符串,如果遇到一个空格就会结束录入,这样空格后面的字符串就不会被录入scanner.nextLine();
获取键盘录入的一行字符串(可含有空格)
继承(extends)
implements 是实现接口的关键词
理解:解决多子类中【共性抽取】的问题,提高了代码的复用性。
继承的格式:
public class Father{
//成员变量;
//构造方法
//成员方法
}
public class Son extends Father{
//成员变量
//构造方法
//成员方法
}
```
2.继承中成员的访问特点
1)成员变量的访问特点如果欲访问的变量,子类中存在就先访问子类中的这个变量,如果没有就访问父类,如果父类也没有,就报错。
this.成员变量—>指明访问本类的成员变量
super.成员变量—>指明访问父类的成员变量
2).成员方法的访问特点子类有就先用子类的,子类没有就用父类的,如果父类也没有就报错。
方法重写(复写/覆盖):
在子类父类关系中有一模一样的方法。
方法重写的注意事项:
1).@Override:注解,起到标记提示的作用写在方法上面,起到检测方法是否正确覆盖如果没有就报红提示,其实就算不写,如果方法没问题也能完成对父类相同方法的覆盖
2).重写方法的返回值类型的范围,必须【小于等于】父类返回值类型的范围
3).重写方法的权限修饰符的范围,必须【大于等于】
父类返回值类型的范围
public > protected > 默认的(default不用写出来) > private1
【小结:实际运用方法重写,只需要和父类写得一模一样就可以了】
方法重写的好处:既能保证父类的方法不变,子类也可以根据自己的需求做不同的实现。
public class Phone{
public void show(){
System.out.println("来电显示");
}
}
public class NewPhone extends Phone{
@Override//提示该方法是重写父类的show方法
public void show(){
super.show(); //调用父类方法
System.out.println("显示头像");
System.out.println("显示姓名");
}
}