静态static的内存图:
静态代码块:
静态代码块:格式
public class 类名称{
static {
//静态代码快的内容
}
}
特点:
当第一次用到本类时,静态代码块执行唯一的一次。
(当你首次用到本类,就执行一次,那么当第二次执行的时候,静态代码快就不执行了)
静态内容总是优先于非静态,所以静态代码块比构造方法先执行
静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值,
public class Person {
static {
System.out.println("静态代码块执行");
}
public Person(){
System.out.println("构造方法执行了!");
}
}
public class Demo04Static {
public static void main(String[] args){
//只要是new,构造方法肯定执行,但是静态代码块也得执行
Person one = new Person();
//这是第二次new 构造方法执行两次,但是静态方法块执行一次
Person two = new Person();
}
}
数组工具类Arrays
iava.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作。
public static String toString(数组);将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3…])小括号的内的(数组)
只要是数组就行
public static void sort(数组),按照默认升序对数组的元素进行排序。(升序就是从小到大)
备注:
1,如果是数值,sort默认按照升序从小到大。
2,如果是字符串,sort默认按照字母升序,(如果是中文是按照中文说对应的数字大小)
3,如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持。(今后学习)
import java.util.Arrays;
public class Demo01Arrays {
public static void main(String[] args){
int[] intArray = {10, 20, 30};
//将int[]数组按照默认格式变成字符串
String intStr = Arrays.toString(intArray);
System.out.println(intStr);//[10, 20, 30]
int[] array1 = {2, 1, 3, 10, 6};//后面是乱的数组,不是升序
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));//默认排序的效果[1, 2, 3, 6, 10]
String[] array2 = {"bbb", "aaa", "ccc"};//String数组
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));//结果是可以的[aaa, bbb, ccc]
}
}
Arrays练习:字符串倒序排列
题目:
请使用Arrays相关的API,将一个随机字符串中的所有字符串升序排列,并倒序打印。
ublic class Demo02ArraysPractise {
public static void main(String[] args){
String str = "avsdfe86564xsgrterwq";
//如何进行升序排列:sort
//必须是一个数组才能用Arrays.sort方法
//那么我就需要一个字符串变成一个数组
//String -- > 数组,用toCharArray
char[] chars = str.toCharArray();
Arrays.sort(chars);//对字符数组升序排列
//需要倒序遍历
// for(int i = 0; i < chars.length; i++){ 这个是正序
// }
//倒序就是正序反过来
for(int i = chars.length - 1; i >= 0; i--){
System.out.println(chars[i]);//xwvtssrrqgfeeda86654
}
}
}
数学工具类Math
Math是数学的意思
*
数学工具类Math
java.util.Math类:
是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作。
(double是返回值)(abs 在数学中是绝对的意思,在这里是绝对值的意思)
public static double abs(double num):获取绝对值;多种重载
(数学当中绝对值的概念:是整数的绝对值是整数,零也是一样的,但是负数的绝对值也是整数)
public static double ceil(double num):向上取整。(什么是向上取整:比如12.1,那么就是往上撩 撩成13)
public static double floor(double num);向下取整;(向下就和向上相反,比如12.1,那么就往下撩 就成了12)
public static lang round (double num);四舍五入;注意这个不带小数点的
Math.PI代表近似的圆周率常量 (double).
public class Demo03Math {
public static void main(String[]args){
//获取绝对值,有多种重载 只要记住abs就可
System.out.println(Math.abs(3.14));//3.14
System.out.println(Math.abs(0));//0
System.out.println(Math.abs(-2.5));//2.5
System.out.println("========");
//向上取整 //什么状况需要向上取整
//比如有21个箱子,一个人一次最多搬10个箱子,那么得几次搬完,
//得三次搬完,只是最后一次搬的少
System.out.println(Math.ceil(3.9));//4.0
System.out.println(Math.ceil(3.1));//4.0
System.out.println(Math.ceil(3.0));//3.0 不能撩一整个所以还是3.0
System.out.println("========");
//向下取整 比如去小超市买东西321.6 只会收你321。 .6就抹去了抹零
System.out.println(Math.floor(30.1));//30.0
System.out.println(Math.floor(30.9));//30.0
System.out.println(Math.floor(31.0));//31.0 无零可抹
System.out.println("========");
//四舍五入 //这个不带小数点的,上面的是可能带小数点的
System.out.println(Math.round(20.4));//20
System.out.println(Math.round(10.5));//11
}
}
练习题:
题目
计算,在-10.8 到 5.9之间,绝对值大于6 或者小于2.1 的整数有多少个?
分析解题思路:
1,首先有了一个范围,既然确定了范围,for循环(范围确定,次数确定就用for循环)
2,起点位置-10.8应该转换成为-10.0,两种办法
2.1可以使用Math.ceil方法,向上(向正方向)取整
2.2 强制类型转换,强转成为int,自动舍弃所有小数位
3,每一个数字都是整数,所以步进表达式应该是num++,这样每次都是+1的。
4,如何拿到绝对值那:Math.abs方法.
5, 一旦发现了一个数字,需要让计数器++进行统计
备注:如果使用Math.ceil方法,-10.8可以变成-10.0.是个double值,注意double值也可以++的,
public class Demo04MathPractise {
public static void main(String[] args){
int count = 0;//符合要求的数量
double min = -10.8;
double max = 5.9;
//这样处理,变量i就是区间之内所有的整数
for(int i = (int) min; i < max; i++){
int abs = Math.abs(i);//绝对值
if(abs > 6 || abs < 2.1){//判断绝对值的要求判断 ||是或者
System.out.println(i);
count++;
}
}
System.out.println("总共有:" + count);//9个
}
}
继承的概述:
继承的格式:
在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。
例如父类是员工,子类是讲师,那么“讲师就是一个员工”。关系: is-a。
定义父类的格式:(一个普通的类定义)
public class 父类名称{
//…
}
定义子类的格式:
public class 子类名称extends 父类名称 {
//…
}
先创建一个父类: 员工
public class Employee {
public void method(){
System.out.println("方法执行!");
}
}
在创建一个员工的子类:讲师
public class Teacher extends Employee {
}
``
`
在创建另一个员工的子类:助教
public class Assistant extends Employee{
}
那么在集合
public class Demo01Extends {
public static void main(String[] args){
//创建了一个子类对象
Teacher teacher = new Teacher();
//Teacher类当中虽然什么都没写,但是会继承来自父类的method方法。
teacher.method();
//创建了另一个子类助教的对象
Assistant assistant = new Assistant();
assistant.method();
}
}