一、堆区和栈区
栈中主要存放一些基本类型的变量。
(int, short, long, byte, float, double, boolean, char)和引用类型数据的内存地址。堆中主要存放引用类型的数据。
栈的存取速度比堆要快。
栈数据可以共享。
栈的数据大小确定的,堆中数据大小可变。
二、数据类型自动转换
如果一个操作数为double型,则整个表达式可提升为double型。
满足自动类型转换的条件:两种类型要兼容,数值类型(整型和浮点型)互相兼容,目标类型大于源类型(例如:double型大于int型)。
强制转换: 如double b=3.98; int a=(int)b;
三、接收键盘输入
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("请输入一个数据:");
//String s=input.next();
int y=input.next.int();
System.out.println("输出"+(y+5));
}
四、获取随机数
Math.random()
获取0-1内一个随机浮点数,不包含1。
Random e = new Random();
e.nextInt(10);
获取0-10内一个随机整数,不包含10。
五、保留2位小数
double a=15.3;
double b=3;
DecimalFormat df =new DecimalFormat("0.00");
String s=df.format(a/b);
double result=Double.valueOf(s);
System.out.println(result);
六、数组
- 定义:
//动态初始化
int[] a;
a = new int[3];
a[0]=8;
a[1]=8;
a[2]=8;
//静态初始化
int[] b=new int[]{1,2,3,4,5};
int[] c={6,7,8,9};
for-each循环
语法:
for(元素类型 元素变量:要遍历对象){
循环语句;
}
for each循环执行次数取决于遍历的对象元素个数。数组增加元素
int[] oldArray={1,2,3,4,5,6,7};
int[] newArray=new int[oldArray.lenght+1];
for(int i=0;i<=oldArray.lenght-1;i++){
newArray[i]=oldArray[i];
}
newArray[newArray.lenght-1]=0;
for(int x:newArray){
System.out.printIn(x);
}
- Arrays工具类
Arrays.sort(array);//排序
Arrays.toString(array);//转字符串
七、排序
冒泡排序
每次拿前一个值跟后一个值进行比较,如果前一个值大,就交换;
每一轮会把当前的最大值交换到最后,直到排序成功。选择排序
依次在数组中选择一个值,跟后面所有的值进行比较;如果有值比这个值小,就交换。插入排序
把数组分成左右两部分,假设左边部分已经完成排序;依次从第二个元素开始,把每个元素插入到左边合适的位置。
八、类和对象
八-1 方法
- System.out.println()
println()是一个方法。
System是系统类。
out是标准输出对象。
这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。
什么是方法?
Java方法是语句的集合,它们在一起执行一个功能;
方法是解决一类问题的步骤的有序组合;
方法一般包含于类中;
方法在程序中被创建,在其他地方被引用。方法的优点
使程序变得更简短而清晰;
有利于程序维护;
可以提高程序开发的效率;
提高了代码的重用性。方法定义格式
访问修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值;
}
八-2 类和对象
- 属性和方法是对象的基本构成。
属性:对象具有的各种特征,每个对象的每个属性都拥有特定值。
例如:张浩和李明的年龄、姓名不一样。
方法:对象执行的操作。
对象:用来描述客观事物的一个实体,由一组属性和方法构成。
对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割。
- 类和对象
类是模子,定义对象将会拥有的特征(属性)和行为(方法)。
类是对象的类型,对象是类的对象。
类是抽象的概念,仅仅是模板,比如:人。
对象是一个你能够看得到、摸得着的具体实体。
面向对象的思维
定义一个类
所有JAVA程序都以类class为组织单元,我们使用关键字class定义类。创建对象的步骤
类名 对象名=new 类名();
引用对象成员:使用“.”进行以下操作。
引用类的属性:对象名.属性
引用类的方法:对象名.方法名()this
this表示当前对象
作用:获取当前对象的属性;使用this调用构造方法。static可以修饰属性和方法
- | static修饰 | 非static修饰 |
---|---|---|
属性 | 类属性、类变量、静态变量 | 实例属性、实例变量 |
方法 | 类方法、静态方法 | 实例方法 |
调用方式 | 类名.属性 类名.方法() 对象.属性 对象.方法() |
对象.属性 对象.方法() |
归属 | 类 | 单个对象 |
九、面向对象三大特性
封装、继承、多态
封装:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的步骤:1)修改属性的可见性(设为private)2)创建公有的getter/setter方法(用于属性的读写)3)在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)。
使用private修饰的属性和方法只能在本类中被访问。
get()set()方法其实就是为封装而设计的。
- 4种访问修饰符
访问修饰符可以用在类、方法、属性上面。
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | ☑️ | |||
默认(friendly) | ☑️ | ☑️ | ||
protected | ☑️ | ☑️ | ☑️ | |
public | ☑️ | ☑️ | ☑️ | ☑️ |
继承:
子类和父类是is-a的关系。
使用继承:编写父类class Pet{//公共的属性和方法} 编写子类,继承父类class Dog extends Pet{//子类特有的属性和方法} class Penguin extends Pet{//}。
子类继承父类后,自动拥有父类非私有属性和方法。一个父类可以被多个子类继承。在java中,一个子类只能继承一个父类。
子类不能继承父类的情况:(1)private成员(2)子类与父类不在同包,使用默认访问权限的成员(3)构造方法。
super关键字
子类访问父类成员
(1)访问父类构造方法
super();
super(name);(在子类构造方法中)需要写在子类构造方法的第一行。
(2)访问父类属性
super.name;
(3)访问父类方法
super.print();final修饰符
final可以用来修饰类、方法、变量;
final修饰的类不能被继承;
final修饰的方法不能被子类重写;
final修饰的变量不能改变值。
- Object类
Object类是所有类的最终父类。
==:地址是否相同。
object类中的equals()方法和==意义相同。
字符串是一个类,也有equals()方法,但是字符串类对equals方法实现了重写。
多态:
同一个引用类型,使用不同的实例而执行不同操作。
使用多态的条件:编写具有继承关系的父类和子类;子类重写父类方法;父类引用指向子类的对象。
多态中有向上转型和向下转型。(向上转型是将子类对象转为父类对象使用;向下转型是将父类对象转为子类对象使用。)instanceof
- 抽象类
抽象类只能被继承,不能被实例化。
抽象类中可以有普通方法,也可以有抽象方法。(抽象方法没有方法体。父类定义的抽象方法,子类必须实现(重写),除非子类也是抽象类)
定义抽象类和抽象方法的目的:
1)使得父类更加简洁纯粹,只做规范而不用涉及具体内容;
2)对子类的方法进行了规范,方便统一管理和团队协同开发;
3)抽象类专门为继承而生。
- 接口类
继承:is-a的关系; 接口:has-a的关系。
接口:
public interface MyInterface{
public void foo();
//其他方法
所有方法都是:public abstract
}
接口不可能被实例化;
实现类必须实现接口的所有方法;
一个类可以实现多个接口;
接口中的变量都是静态常量。
接口的存在可以解决Java中不能多继承的问题。
接口类属性是全局静态常量;接口类方法必须是public抽象方法;没有构造方法;无法实例化。