static
1.static引入
/**
*姓名和年龄都是变化的,我们大家能接受 因为每个人不一样
*但是我们都是中国人
* 一样的国籍,每次创建对象,都要在堆内存开辟内存空间
* 浪费内存,怎么办呢?
*针对多个对象有共同的成员变量的值得时候
*Java提供了一个关键字static(静态的)
*/
public class Person {
private String name;
private int age;
static String country;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show() {
System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
}
}
//被static修饰的成员变量 在内存中只有一份 大家可以共用
public class PersonTest {
public static void main(String[] args) {
Person person=new Person();
person.setName("小玲");
person.setAge(18);
person.country="中国";
person.show();
Person person2=new Person();
person2.setName("小玲好兄弟");
person2.setAge(19);
person2.show();
}
}
2.static特点
/**
*static特点:
*A:可以修饰成员变量,还可以修饰成员方法
*B:随着类的加载而加载
*C:被类的所有对象所共享
*公共的 举例 饮水机
*D:可以通过类名调用
*其实也可以通过对象名调用
*推荐使用类名调用
*/
class Student{
//非静态变量
int num=10;
//静态变量
static int num2=20;
//非静态方法
public void hello() {
System.out.println("hello");
}
//静态方法
public static void play() {
System.out.println("paly");
}
}
public class StudentTest {
public static void main(String[] args) {
Student student=new Student();
System.out.println(student.num);//10
System.out.println(student.num2);
//static修饰的成员静态的(共有的)
//直接通过类名.静态属性
System.out.println(Student.num2);
student.play();
//static修饰的方法,可以通过类名直接调用
Student.play();
}
}
3.static内存图解
4.static关键字的注意事项
/**
*静态的是随着类的加载而加载,this是随着对象的创建而存在
*静态比对象先存在
*静态的方法只能访问静态的成员变量和静态的成员方法
*非静态方法: 所有的变量和方法都可以访问
*简单记:静态只能访问静态
*/
class Teacher{
//非静态变量
public int num=10;
//静态变量
public static int num2=90;
//非静态的方法
public void show() {
System.out.println(num);
System.out.println(this.num);
System.out.println(num2);
function();
method();
}
//静态方法
public static void method() {
//静态方法只能使用静态变量
//System.out.println(num);
//静态变量
System.out.println(num2);
//静态方法只能调用静态方法
//function();
}
//非静态的方法
public void function() {
}
}
public class TeacherDemo {
//静态方法
public static void main(String[] args) {
TeacherDemo teacherDemo=new TeacherDemo();
teacherDemo.add();
sum();
}
public void add() {
}
public static void sum() {
}
}
5.main方法
public class HelloWorld {
/**
* public:公共的,访问权限最大。由于main jvm调用的,所以权限要足够大
* static:静态的 不需要创建对象 通过类名可以调用 方便jvm
* void: 方法返回值返回给调用者 而main由jvm调用 返回给jvm没有意义
* main:是一个常见的程序入口
* String[] args 形式参数 字符串数组
* 这个东西有什么用呢?
* 早期用来键盘录入,Scanner淘汰了
* @param args
*/
public static void main(String[] args) {
System.out.println("班长好!");
for(int i=0;i<args.length;i++) {
System.out.println(args[i]);
}
}
}
6.代码块
//代码块:在Java中,使用{}括起来的代码被称之为代码块
//根据它的位置不同:可以分为
//1.局部代码块: 局部位置,方法中限定变量的生命周期
//2.构造代码块:在类的成员位置,每次调用构造方法之前执行作用:可以把多个构造方法共同的代码放到一起,对象进行初始化
//3.静态代码块: 类的成员位置,用{}括起来,加上static修饰
// 对类进行初始化
public class Code {
static int x=10;
{
System.out.println("我是构造方法共同的代码");
}
static {
//只能访问静态变量
System.out.println(x);
System.out.println("静态代码块");
}
public Code() {
System.out.println("无参构造");
}
public Code(String name) {
System.out.println("有参构造");
}
public static void main(String[] args) {
int a=10;
Code code = new Code("aa");
//System.out.println(a);
}
}
7.工具类
如果一个方法是大家都要用的方法,用静态方法
工具类:一般都是定义静态的方法
如果这个方法是对象独有的name get/set 非静态方法
7.1 数组的工具类
public class ArrayTool{
/**
*获取整型数组最大值
* @param arr 传递一个整型数组
* @return 数组的最大值
*/
public static int getMax(int[] arr) {
if(arr==null) {
return -999;
}
int max=arr[0];
for(int i=1;i<arr.length;i++) {
if(arr[i]>max) {
max=arr[i];
}
}
return max;
}
/**
* 遍历整型数组
* @param arr 传递一个整型数组
*/
public static void print(int[] arr) {
if(arr==null) {
return;
}
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
/**
* 对整型数组进行排序
* @param arr 传递一个整型数组
*/
public static void sort(int[] arr) {
if(arr==null) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//获取指定元素的下标
//返回值 int下标
//参数 int[] arr,int value
//如果元素不存在返回-1
}
7.2 生成api
javadoc -d 文档的存放的目录 -author -version 需要生成文档的java文件
javadoc -d H:\code\J336\day11\src\com\gxa\demo03 -author -version ArrayTool.java
用别人的东西的时候 看api文档
sun javase jdk 写好了很多的类 api
servlet sun api
ssm api
7.3 使用sun公司的api
现在左侧搜索,找这个类看是否是我们需要的类,包含是否正常,看是否有构造器,有构造方法需要创建对象才能使用,非静态方法,如果没有构造,简单了,静态方法,直接调用