MyClass类:
package demo13Static类;
/*
无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用:
类名称.静态变量
类名称.静态方法
对于一个类当中的静态方法,可以省略类名称
注意:静态只能访问静态,不能访问非静态
因为:在内存当中先有的静态内容,后有的非静态内容
静态方法当中不能写this
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
*/
public class MyClass {
int num;//成员变量
static int numStatic;//静态变量
//成员方法
public void method(){
//成员方法可以访问成员变量
System.out.println(num);
//成员方法可以访问静态变量
System.out.println(numStatic);
}
//静态方法
public static void methodStatic(){
//静态可以访问静态变量
System.out.println(numStatic);
/*
//静态不能直接访问非静态【重点】
System.out.println(num);//错误
//静态方法中不能使用this
System.out.println(this);//会报错,它会强制的翻译为类名.静态方法名,不用对象,this代表当前对象
*/
}
}
StaticMethod类:
package demo13Static类;
/*
注意:静态只能访问静态,不能访问非静态
因为:在内存当中先有的静态内容,后有的非静态内容
*/
public class StaticMethod {
public static void main(String[] args) {
MyClass obj=new MyClass();//首先创建对象
//然后才能使用没有static的关键字的内容
obj.method();
//对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用
obj.methodStatic();//正确,不推荐使用,这种写法在编译之后会被javac翻译成类名.静态方法名
MyClass.methodStatic();//正确,推荐
// 对于本身的静态方法,可以省略类名
myMethod();
StaticMethod.myMethod();//等效
}
private static void myMethod() {
System.out.println("自己方法");
}
}
Student类:
package demo13Static类;
public class Student {
private int id;//学号
private String name;
private int age;
static String room;
private static int idCounter=0;//学号计数器,每当new了一个新对象,计数器++
public Student() {
this.id=++idCounter;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
this.id=++idCounter;//自动生成id
}
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 int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
StaticField类:
package demo13Static类;
/*
一旦用了static关键字,那么这样的内容不在属于对象自己,而是属于类的,所以凡是本类的对象,都是共享同一份。
*/
public class StaticFiled {
public static void main(String[] args) {
Student one=new Student("郭靖",19);
one.room="101";//给one对象的room属性赋值,在创建对象被其他对象所共享
Student two=new Student("轻容",18);
System.out.println("姓名:"+one.getName()+",年龄"+one.getAge()+",教室"+one.room+",学号:"+one.getId());
System.out.println("姓名:"+two.getName()+",年龄"+two.getAge()+",教室"+two.room+",学号:"+two.getId());
}
}
StaticPerson类:
package demo13Static类;
/*
静态代码块格式:
public class 类名称(){
static{
//内容
}
}
特点:
当第一次用到本类时,静态代码块执行唯一的一次
*/
public class StaticPerson {
static{
System.out.println("静态代码块执行");
}
public StaticPerson() {
System.out.println("构造方法执行");
}
}
StaticFileTest类:
package demo13Static类;
/*
静态代码块格式:
public class 类名称(){
static{
//内容
}
}
特点:
当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优先于非静态,所以静态代码块比构造方法先执行
静态代码块的典型用途:
用来一次性的对静态成员变量进行赋值。
*/
public class StaticFileTest {
public static void main(String[] args) {
StaticPerson one=new StaticPerson();
/*第一次:
静态代码块执行
构造方法执行*/
StaticPerson two=new StaticPerson();//第二次:静态代码块不执行,构造方法执行
}
}
DemoArrays类:
package demo14数组工具类Arrays;
import java.util.Arrays;
/*
java.until.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组常见的操作
String toString(数组):将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3....])
void sort(数组):按照默认升序(从小到大)对数组进行排序
备注:
1.如果是数值,sort默认按照升序从小到大
2.如果是字符串,sort默认按照字母升序
3.如果是自定义类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持
*/
public class DemoArrays {
public static void main(String[] args) {
int[] intArray={10,20,30,40};
//将int[]数组按照默认格式变成字符串
String intStr= Arrays.toString(intArray);
System.out.println(intStr);///[10, 20, 30, 40]
int[] array1={2,1,5,10,6,8};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));//[1, 2, 5, 6, 8, 10]
String[] array2={"aaa","ccc","bbb"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));//[aaa, bbb, ccc]
}
}
DemoArrayPractice类:
package demo14数组工具类Arrays;
import java.util.Arrays;
/*
将一个随机字符串中的字符按照字符升序排列,并倒叙打印
*/
public class DemoArrayPractice {
public static void main(String[] args) {
String str="asdfjadsfkasfjasd";
//如何进行升序 必须是一个数组 sort
//String---数组 用toCharArray
char[] chars=str.toCharArray();
Arrays.sort(chars);//对数组升序排列
//倒叙遍历
for (int i =chars.length-1 ; i>=0;i--) {
System.out.print(chars[i]);
}
}
}