大纲:
Day11(java基础知识)学习目标
【学习目标】理解、了解、应用、记忆
通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度)
- 【理解】static静态关键字
- 【理解】能够独立阐述静态的定义和特点
- 【理解】能够独立阐述静态的注意事项
- 【理解】能够独立阐述静态的优缺点
- 【应用】能够自定义一个工具类并使用
- 【理解】代码块
- 【理解】能够在类中独立定义构造代码块
- 【应用】能够在类中独立定义静态代码块
- 【理解】能够理解构造代码块和静态代码块的执行流程
收获:
一:静态static的调用
package com.itheima_01;
/*
* static:是一个关键字,用于修饰成员变量和成员方法
* static的特点:
* 被所有的对象所共享
* 可以使用类名调用
* 静态的加载优先于对象
* 随着类的加载而加载
*
*/
public class StaticDemo {
public static void main(String[] args) {
Person.graduateFrom = "传智学院";
Person p = new Person();
p.name = "小苍同学";
p.age = 18;
//p.graduateFrom = "传智学院";
p.speak();
Person p2 = new Person();
p2.name = "小波同学";
p2.age = 20;
//p2.graduateFrom = "传智学院";
p2.speak();
}
}
class Person {
String name;
int age;
static String graduateFrom;//毕业院校
public void speak() {
System.out.println(name + "---" + graduateFrom);
}
}
二static的注意事项:
* 静态方法:
* 可以调用静态的成员变量
* 可以调用静态的成员方法
* 不可以调用非静态成员变量
* 不可以调用非静态成员方法
* 静态方法只能调用静态的成员
* 非静态方法:
* 可以调用静态的成员变量
* 可以调用静态的成员方法
* 可以调用非静态的成员变量
* 可以调用非静态的成员方法
*
* 静态的方法中是否有this这个对象?没有的
三 Math类使用
package com.itheima_03;
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.abs(-14));
System.out.println(Math.ceil(1.2));
System.out.println(Math.floor(1.2));
System.out.println(Math.round(1.2));
System.out.println(Math.round(1.6));
System.out.println(Math.max(3, 4));
System.out.println(Math.pow(2, 4));
// 返回一个随机数,大于零且小于1
System.out.println(Math.random());
}
}
四 自定义工具类
package com.itheima_03;
public class MyArrays {
private MyArrays() {}
public static int getMax(int[] arr) {
int max = 0;//参照物
//遍历数组
for(int x = 0;x < arr.length;x++) {
if(arr[x] > max) {
max = arr[x];//替换参照物
}
}
return max;
}
public static int getIndex(int[] arr,int a) {
//遍历数组
for(int x = 0;x < arr.length;x++) {
if(arr[x] == a) {
return x;
}
}
return -1;//如果查不到制定的参数,则返回-1
}
}
package com.itheima_03;
public class MyArraysDemo {
public static void main(String[] args) {
int[] arr = {3,5,8,10,1};
int max = MyArrays.getMax(arr);
System.out.println(max);
int index = MyArrays.getIndex(arr, 8);
System.out.println(index);
}
}
五静态代码块
package com.itheima_04;
public class BlockDemo {
public static void main(String[] args) {
Teacher t = new Teacher();
Teacher t2 = new Teacher("小苍老师",18);
}
}
class Teacher{
String name;
int age;
static { // 注意这里没有static 调用的区别
System.out.println("我爱java");
}
public Teacher() {
System.out.println("我是无参空构法");
}
public Teacher(String name,int age) {
System.out.println("我是有参构造法");
this.name = name;
this.age = age;
}
}
六:理解构造代码块和静态代码块的执行流程
package com.itheima_04;
/*
* Coder静态代码块执行 --- Coder构造代码块执行 --- Coder无参空构造执行
*
*
* BlockTest静态代码块执行 --- BlockTest的主函数执行了 --- Coder静态代码块执行 --- Coder构造代码块执行 --- Coder无参空构造执行
* Coder构造代码块执行 --- Coder无参空构造执行
*
*/
public class BlockTest {
static {
System.out.println("BlockTest静态代码块执行");
}
{
System.out.println("BlockTest构造代码块执行");
}
public BlockTest(){
System.out.println("BlockTest无参构造执行了");
}
public static void main(String[] args) {
System.out.println("BlockTest的主函数执行了");
Coder c = new Coder();
Coder c2 = new Coder();
}
}
class Coder {
static {
System.out.println("Coder静态代码块执行");
}
{
System.out.println("Coder构造代码块执行");
}
public Coder() {
System.out.println("Coder无参空构造执行");
}
}