昨天知识点总结
1.二维数组
比较一维数组:对于一维数组如果元素是简单数据类型,我们是将对象的地址放入数组是将对象的地址放入数组, 创建 遍历-----增强for循环 2.作业 3.排序
4.查找
5.面对对象的理解
面向对象与面向过程的比较 类与对象的关系:类是对象的抽象,对象是类的实现 类的三要素 创建具体的类和对象
成员变量和局部变量
成员变量和局部变量的区别
1.作用域:成员变量默认是整个对象,局部变量是从定义开始到所在函数,if,for等结束 2.默认值:成员变量有默认值,局部变量没默认值,必须先赋值在使用 3.释放机制:成员变量跟对象保持一致,通过垃圾回收机制回收,局部变量使用完立即释放 4.存放的位置去:成员变量存放在堆区中的对象之中,局部变量存放在栈区中的方法中。 static:
我们可以将成员分为两类:1.使用static修饰的-----静态成员 2.未被static修饰的------非静态的成员 静态成员:静态的方法和静态的成员变量---- 可以使用引用或类名调用 非静态的成员:非静态的方法和非静态的成员变量------必须使用引用调用 为什么静态的成员可以通过类名直接调用? 拿到一个Person类后,通过执行javac.exe(编译)-----Person.class(字节码文件) 在执行java.exe(运行)------运行结果 注意我们在使用类名直接调用成员的时候,本质上字节码文件在工作 关于字节码文件:
1.字节码文件本身是一个特殊的对象,区别于普通new出来的对象 2.一个类对应一个字节码文件 当成员被static修饰之后就变成了静态的,会在class生成的同时放在静态方法区中一份,而静态方法区的特点是内容会随着 程序的结束而释放,所以对象的创建与否不能影响它们的调用,所以可以直接使用类名调用 静态成员方法和非静态成员方法优先使用哪一个? 优先使用静态成员方法,因为静态的方法比非静态的效率高,节省内存。 注意:但是有一种情况例外:当方法中必须使用非静态成员变量时候,这时必须使用非静态的方法 总结:被static修饰的成员变量会变成静态的成员变量,成员方法会变成静态的成员方法,
public class demo2 {
public static void main ( String[ ] args) {
Person person = new Person ( ) ;
person. name = "bingbing" ;
person. age = 10 ;
person. weight = 30 ;
person. show ( ) ;
person. play ( ) ;
Person. weight = 30 ;
Person. play ( ) ;
}
}
class Person {
String name;
int age;
static int weight;
public void show ( ) {
System. out. println ( "show" ) ;
}
public static void play ( ) {
System. out. println ( "piay" ) ;
}
}
static
static的作用总结:可以修饰成员变量和成员方法 作用:保值-使成员的存活时间(生命周期)与程序一致 被static修饰的成员变量的特点
1.被当前类的所有对象共享 2.由随着对象的加载而加载变成随着类的加载而加载,变量被放在了静态方法去,执行顺序优先于非静态的成员变量 3.可以使用类名或引用调用 静态的成员变量和非静态的成员变量的区别:
1.存储的数据的使用:非静态的只能供当前的对象使用,静态的供所有对象共享 2.生命周期:非静态的跟对象一致,静态的跟程序一致 3.存储的位置:非静态的:对象中 静态的:静态方法区 4.访问的方式:非静态的:引用 静态的:引用或类名 被static修饰的成员方法的特点 静态的成员方法内部只能使用静态成员变量 非静态的内部既可以使用静态的成员变量,也可以使用非静态的成员变量
public static void main ( String[ ] args) {
Dog. age = 3 ;
Dog dog = new Dog ( ) ;
dog. weight = 5 ;
System. out. println ( dog. age+ " " + dog. weight) ;
Dog dog1 = new Dog ( ) ;
System. out. println ( dog1. age+ " " + dog1. weight) ;
}
class Dog {
static int age;
int weight;
public void test ( ) {
test1 ( ) ;
play ( ) ;
}
public void test1 ( ) {
}
public static void test2 ( ) {
}
public static void play ( ) {
test2 ( ) ;
}
}
构造方法
调用的时候的构造:类名+() 定义时候的基本构成 修饰词 方法名(参数列表){ 方法体
} 注意点:1.没有返回值这一项 2.方法名必须与类名保持一致 构造方法的作用:对对象的属性进行初始化,如果我们自己不创建,系统会调用默认的构造方法 自己的构造方法的分类:
1.无参的构造方法:与系统默认的构造方法一会,会将成员变量赋值成null或0或false 2.有参的构造方法:会将成员变量先进行初始化,在完成赋值(通过参数传入的值) 创建构造方法的注意点:
1.一旦创建了自己的构造方法,就不会再去调用系统的默认方法 2.多个构造方法之间是重载的关系 this:是一个关键字,是一个引用数据类型,保存的是当前对象的地址,代表的是当前的对象; *this的功能总结
1.可以用于区分成员变量和局部变量 2.可以在构造方法中调用其他重载的构造方法,提高代码的复用性,简化代码 *使用this的注意点: 1.在作为方法使用时,只是用于构造方法 2不能自己调用在自己-----造成死循环 3.不能相互调用------ 造成死循环 4.在构造方法中调用其他重组转载的构造方法,必须放置在第一行 5.this不能在静态方法中使用
public static void main ( String[ ] args) {
Student student = new Student ( ) ;
Student student1 = new Student ( "bingbing" ) ;
student. name = "zhangsan" ;
System. out. println ( student1. name) ;
Student student2 = new Student ( "bingbing" , 40 , 120 ) ;
System. out. println ( student2. height) ;
}
class Student {
String name;
int age;
int height;
public Student ( ) {
System. out. println ( "无参构造方法" ) ;
}
public Student ( String name, int age) {
this ( name) ;
System. out. println ( "无参构造方法" ) ;
this . age = age;
}
public Student ( String name) {
this . name = name;
System. out. println ( "有参构造方法" ) ;
}
public Student ( String name, int age, int height) {
this ( name, age) ;
this . height = height;
System. out. println ( "有参构造方法" ) ;
}
}
代码块
静态代码块儿:会随着类的加载而加载,在整个程序执行的过程中只执行一次,执行顺序优先于main 构造:static+{} 作用:用于对类进行初始 构造代码块儿:会随着对象的加载而加载,每次创建对象会执行一次,执行顺序优先余构造方法 构成:{} 作用用于对对象进行初始化 整体顺序:静态代码块 优先于 main 优先于 构造代码块 优先于构造方法
public class Demo8 {
static {
System. out. println ( "a" ) ;
}
public static void main ( String[ ] args) {
System. out. println ( "c" ) ;
Pig pig = new Pig ( ) ;
Pig pig1 = new Pig ( ) ;
pig. play ( ) ;
}
static {
System. out. println ( "b" ) ;
}
}
class Pig {
static {
System. out. println ( "e" ) ;
}
{
System. out. println ( "f" ) ;
}
public void play ( ) {
System. out. println ( "d" ) ;
}
public Pig ( ) {
System. out. println ( "g" ) ;
}
}