目录
如何打印出的内容不换行
System.out.println();
是打印完内容然后自己换行
如果要使内容不换行,则可以用System.out.print();
即少了一个"ln"
也可以直接用System.out.println();
来换行
方法重载的判决条件
第一:在同一个类中
第二:方法名相同
第三:参数类型或参数数量不同
类与对象
类的定义
构造一个类的思路:把对象的相同部分封装到类里面;
类的作用就是描述多个对象的共同特征和行为。
如图:这里,下面四种玩具都是根据上面的玩具模型构造出来的,他们都有着玩具模型的所有特征,比如俩胳膊俩退,一个脑袋,然后有头发,那么这样,玩具模型就是一个类,下面的四个玩具就是由玩具模型所创造出来的四个不同的对象
对象的原理
定义一个类:Person
用它创建一个对象Person p = new Person();
其中,真正创建对象的只有new Person()部分,前面的Person p
是声明一个Person类型的变量,然后把new Person();
创建的对象的地址赋给p,然后通过p来引用这个定义的对象,所以说p还是变量,不过他引用了对象,所以我们也可称p对象
类的封装
什么是封装,为什么要封装?
就比如现实中的手机,手机制造厂商只需要把给用户用的那一部分展示给我们,而内部的制造原理,比如芯片,电池不需要暴露出来,用手机壳包装起来,我们构造一个类,也需要这样,把我们需要暴露出来的用private给封装起来,给需要暴露到外界的用public修饰。
比如:把属性变量这里是phone中的memory(内存)设置为私有,然后写get和set方法,get用来返回memory,set用来设置memory
构造方法的重载
构造方法也可以重载,我们可以在创建对象的时候通过参数的传递来调用不同的构造方法来初始化对象
this关键字
java中this可以明确地访问一个类的成员变量,可以解决成员变量和局部变量名称冲突的问题,
当成员变量和局内变量重名的时候,我们可以用this.变量名
来调用成员变量,如下:
上面用private修饰的是成员变量,下面红线标注的是局部变量,如果我们直接用memory调用的是局部变量,所以我们可以用this.memory
来调用成员变量
我们可以用this来在一个构造方法中访问其他的构造方法
可以通过this(参数列表)
来访问:
这个东西有两点要注意,1.只能在构造方法中使用this()来调用其他构造方法,2.在构造方法中使用this调用只能位于第一行,而且一个构造方法只能调用一次其他的构造方法
垃圾回收
我们可以通过调用System.gc()
方法来通知Java虚拟机立即进行垃圾回收,当一个对象在内存中被释放的时候,他的finalize()
会被自动调用,因此我们可以通过重写finalize()
方法来观察垃圾回收
即:
static
static修饰成员变量
static作用:
static可以用来节省内存,比如我们创建一个类,他的每个对象的某一属性值都必须一样,那我们就不必把它定义成普通的成员变量,我们可以把它修饰成static(静态),这样我们每个实例都可以直接访问同一个的成员变量,而且用static修饰的不会跟着对象的创建而再在对象中创建新的变量,所有对象共用一个
static可以用来修饰所有对象共同且必须一模一样的属性或方法
如:
通过类名.静态成员名
来调用
不能用来修饰局部变量
static修饰成员方法
可以使我们创建的方法不必和对象绑在一起,即我们想在不创建对象的时候就可以调用某个方法,我们就可以用static来修饰这个方法
和static修饰成员变量的调用方式不同的是,我们这个有两种调用方式
- 直接
类名.方法名()
- 通过类的实例对象来访问
对象名.方法名()
static静态代码块
一般用在类的初始化上面,只在类加载的时候执行一次,往后不再执行
语法:
static{语句块}
单例模式
单例模式就是只允许我们创造的某个类只能有一个对象
比如我们创造现实世界中的太阳和月亮,只能有一个
有两种方式
- 用
private
修饰类的构造方法,然后在类中创建一个静态的而且是私有的类的对象。然后设置一个返回这个对象的静态方法。
外界可以直接通过get方法得到这个对象 - 用
private
修饰类的构造方法,然后在类中创建一个用public,final,static
关键字修饰的对象
可以直接访问这个创建的对象,但是不能修改
final
final可以禁止外部对其修饰过的变量进行修改
有三个特性:
- final修饰的类不能被继承
- final修饰的方法不能被子类重写
- final修饰的变量(成员变量和局部变量)是常量,只能赋值一次
泛型
泛型的作用:在设计方法或类的时候,不确定要用到哪些数据类型,可以用泛型先占着位置,作用等同于形参,等使用这些类或者方法的时候再传入具体的数据类型
定义方式<T>
或<T,E,G,A.....>
即可以有一个或多个参数
泛型使用方式
- 直接用在字符的容器(比如集合,数组)上面,用来规定此容器只能存放哪种类型的数据
- 定义泛型类,可以在构造类的时候为其设置一个"形参",这个形参的作用是表示一种数据类型,我们在类中可以先使用这个形参,然后通过这个类创建对象的时候,可以传入真实的数据类型(如String),来作为实参来替换这个形参,当然,我们创建对象的时候不一定非要传入数据类型,可以在使用其中方法的时候再传入也可以
- 定义泛型方法,简单来说,就是在方法中使用泛型,和泛型类的使用有点像