public class Demo01Math {
public static void main(String[] args) {
//求绝对值
int a = Math.abs(-9);
System.out.println("求绝对值:(abs -9)"+a);
//向上取整
double ceil = Math.ceil(3.14);
System.out.println("向上取整:(ceil 3.14)"+ceil);
double ceil1 = Math.ceil(-3.14);
System.out.println("向上取整:(ceil -3.14)"+ceil1);
//向下取整
double floor = Math.floor(3.99);
System.out.println("向下取整:(floor 3.99)"+floor);
double floor1 = Math.floor(-3.99);
System.out.println("向下取整:(floor -3.99)"+floor1);
//四舍五入 参数+0.5 再进行floor
double round = Math.round(-3.9999);
System.out.println("四舍五入:(round -3.9999)"+round);
//开方
double sqrt = Math.sqrt(9);
System.out.println("开方:(sqrt 9)"+sqrt);
}
}
java.util.ArrayList 是大小可变的数组实现,存储在内的数据称为元素。
此类提供一些方法来操作内部存储的元素。ArrayList中可不断添加元素,
其大小也自动增长。
< E >,表示一种指定的数据类型,叫做泛型。在出现E的地方,我们使用一种引用类型将其替换即可,表示我们将存储哪种引用类型的元素。没有规定泛型,集合中的元素可以是任意类型。但是使用get()方法时,就不能确定返回类型,会出现报错。使用集合时,需要规定泛型。
基本格式:
ArrayList list = new ArrayList<>();
void add (E e)
E remove (int index):移除掉index位置的元素
E get(int index):获取index位置上的元素
int size():获取长度
package ArrayList;
import java.util.ArrayList;
public class Demo01ArrayListInit {
public static void main(String[] args) {
//
ArrayList list = new ArrayList();
//打印集合对象,就是将内容打印
System.out.println(list);// []
}
}
package ArrayList;
import java.util.ArrayList;
public class Demo02API {
public static void main(String[] args) {
//增、删、查
ArrayList list = new ArrayList<>();
//向集合添加元素
list.add("yy");
list.add("cc");
list.add("bb");
list.add("aa");
list.add("dd");
list.add("yy");
System.out.println("添加元素:\t"+list);
//从集合中删除元素,参数:下标
list.remove(3);
list.remove("yy");//删除第一次出现的元素
System.out.println("删除第三位元素:"+list);
//查询 查询第3个位置的元素
String get = list.get(2);
System.out.println("get(查询第三个位置的元素):"+get);
//获得元素个数 ——长度
int size = list.size();
System.out.println("size(输出list的长度):"+size);
}
}
1.子类中的成员变量和父类同名 name
Dog d = new Dog();
d.name -> 就是指自己定义的name,不是继承过来的name
结论: 父子类中的成员变量不要同名
2.子类中可以使用 super 引用父类对象
3.创建子类对象之前, 会先创建父类对象
加载子类之前, 会先加载父类
4.构造方法: 父类的构造方法不能被子类继承的
创建子类对象, 会先默认调用父类的无参构造器
原因: 子类构造方法中, 第一行默认 super()
可以手动调用父类其他构造方法
结论: 子类构造方法中, 一定会先调用父类的构造方法
父类中, 建议先写无参构造器
5.通过子类对象调用方法时
先看子类中有没有定义这个方法, 若定义了, 就调用子类方法
子类中没有这个方法, 就调用父类继承的方法
通过extens关键字,可以声明一个子类继承另一个父类,定义格式如下:
class 父类 {
……
}
class 子类 extends 父类{
……
}
注意:
子类的每个构造方法中均有默认的super(),调用父类的空参构造方法。手动调用父类构造方法会覆盖默认的super()。
super()和this()都必须在构造方法的第一行,所以不能同时出现。
①Java只支持单继承,不支持多继承。
class C extends A{}; //正确
class C extends A,B....//错误
②Java支持多层继承(继承体系)。
class A{}
class B extends A{}
class C extends B{}
顶层父类是Object类。所有类都默认继承Object类。
③子类和父类是一种相对的概念。
父类中的方法,被它的子类重写,子类各自实现的都不尽相同。那么父类的方法声明和方法主体,只要声明还有以意义,而方法主体则没有了存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。
使用abstract关键字修饰方法,该方法就成了抽象方法。
定义格式:
public abstract void run();
抽象类
如果抽象类包含抽象方法,那么该类必须是抽象类。
定义格式:
abstract class 类名字{
}
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
注意事项:
① 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
② 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员变量的。
③抽象类中,不一定含抽象方法,但是有抽象方法的类必定是抽象类。
④抽象类的子类,必须重写抽象类父类中所有的抽象方法,否则编译无法通过且报错。除非该子类也是抽象类。