目录
一.类的认识及其定义方式
二.对象的实例化,对象的初始化
三.类中成员变量,成员方法,构造方法的用法及使用
四.封装
五.代码块
1. 对于类的认识可以这样理解,类相当于对一个东西或实物(专业名词叫实体或对象)来进行进一步描述,描述什么呢?描述它的属性,它的功能即它是干啥的。例如一个手机,手机就是一个实体,即可看成一个类,它的属性如处理器,屏幕材质,品牌等等,它的功能就是打电话,看电影,聊天等等。这样就是一个类。下面是类的定义格式 语法:
// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
那么这里用书来举例,代码如下:
class Book {
int id ;
String name;
double price ;
String author ;
String press ;
}
上面定义的都是这个类(书)的成员变量,即它的属性。下面来定义它的成员方法即它的功能或干啥:
class Book {
int id ; //编号
String name; //
double price ; //价格
String author ; //
String press ; //出版社
public void found(){ //成员方法
System.out.println("查找知识");
}
}
注意:
此处方法一定要写到类里面,类名注意采用大驼峰定义(首字母大写)。
2.对类进行实例化,用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
对于类和对象:类相当于一个虚拟的东西,需要实例化出一个对象才能实际存储数据
class Student{
String name;
int age;
public void output(){
System.out.println(name); //输出学生姓名
System.out.println(age); //输出学生年龄
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student(); //实例化对象stu
stu.name = "zhang san"; //通过.来调用类中的方法
stu.age = 28;
stu.output();
}
}
输出为:

注意:
实例化对象要用关键词new 类名 对象名 = new 类名();
通过.来调用类中的方法 对象名.方法(成员变量)
当然还可以通过实参和形参的方式来对对象进行赋值:
class Student{
String name;
int age;
public void set(String name,int age){ //形参接收
this.name = name;
this.age = age;
}
public void show(){
System.out.println(name+" "+age);
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student();
stu.set("zhangsan",28); //传参
stu.show();
}
}

此处大家可以注意到用到了this,在Java中this引用能帮助我们更加容易看懂代码 ,那么为什么有这个呢?在Java中当你把形参写成和成员变量名一样的时候,若给name和age赋值的时候,那么编译器就搞不清了,到底是谁给谁赋值,成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?这样一来就会导致赋值失败,输出默认值。

3.上面已经提到了成员变量,成员方法,在此介绍构造方法
概念:构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
构造方法:(1)名字必须与类名相同,无任何返回值 public 类名()
(2)构造方法可以有不同数的参数,当被调用时会根据不同个数的参数来实现对应个数参数的调用
class Student{
String name;
int age;
public void set(String name,int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.println(name+" "+age);
}
public Student(String name){
System.out.println(name+"构造方法输出"); //一个参数输出
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student("lishi"); //构造方法初始化
stu.set("zhangsan",28);
stu.show();
}
}

class Student{
String name;
int age;
public void set(String name,int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.println(name+" "+age);
}
public Student(String name,int age){ //两个参数
System.out.println(name+" 构造方法输出");
System.out.println(age+" 构造方法输出");
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student("lishi",39); //两个参数
stu.set("zhangsan",28);
stu.show();
}
}

class Student{
String name;
int age;
public void set(String name,int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.println(name+" "+age);
}
public Student(String name,int age){
System.out.println(name+" 构造方法输出");
System.out.println(age+" 构造方法输出");
}
public Student(){
this.name = "九九";
this.age = 18;
System.out.println(name+" 无参构造方法输出");
System.out.println(age+" 无参构造方法输出");
}
}
public class Test_5 {
public static void main(String[] args) {
// Student stu = new Student("lishi",39);
Student stu = new Student(); //无参实例化对象
stu.set("zhangsan",28);
stu.show();
}
}

上面分别为两个参数,一个参数和无参数的构造方法,通过最后一个无参数调用可以看出,在类里面有两个参数的构造方法和无参数的构造方法时,编译器会自动选择无参数的构造方法。
注意:当实例化对象时,编译器就会自动调用类里面的构造方法,如果类里面没用构造方法的话,编译器就会默认一个构造方法,不过这个方法是无任何输出的。即在运行代码时,出现实例化对象这句代码时,就会自动调用构造方法。
当然在构造方法中也可以通过this来调用其他构造方法,这样就可以给其他构造方法赋值,使代码简化。


注意:(1)在这里用this()来调用,括号里面为参数,调用几个参数的构造方法里面就对应写几个参数,其this()必须为构造方法的首句。
(2)若两个参数的里面this调用无参的,而无参的里面的this又调用两个参数的,这样就会形成一个环,就会报错。这里this就相当于将参数传上去,然后执行完这个构造方法再回来执行this()下面的代码。
这里还有一个小小的细节,在编代码或运行途中,成员变量没有赋初值就可以使用或输出(输出为默认值),而局部变量不赋初值就会报错。在此对成员变量,局部变量,构造方法,成员方法再梳理下,以防混乱。

若在成员方法或构造方法里面设置变量,如int a; 这个就叫局部变量,局部变量只会对本方法有效,在别的方法里面无效,需要重定义。
4.封装
“封装”顾名思义就是对东西或事物进行“穿衣服”,把它们的内部细节隐藏起来。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。Java中主要通过类和访问权限来实现封装,类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认 知,而访问权限用来控制方法或者字段能否直接在类外使用。访问权限除了可以限定类中成员的可见性,也可以控制类的可见性。
常见的访问限定符有public,private等,
public可以理解为都能看见,都可以用,而private(私有)就只能自己看见了,用的话需要方法。
class Student{
private String name;
private int age; //定义私有变量name,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 output(){
System.out.println(getName());
System.out.println(getAge()); //对名字和年龄进行输出
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("zhang san");
stu.setAge(28);
stu.output();
}
}
要访问私有变量就要写set和get方法,这样主函数里面才可以访问并输出。否则会报错,无法识别变量。 在这里其实还可以通过static修饰方法来访问私有变量。
class Student{
private static String name;
private static int age;
public static String func(){ //定义一个静态方法
Student.name = "zhang";
return Student.name;
}
}
public class Test_5 {
public static void main(String[] args) {
Student stu = new Student();
System.out.println(Student.func()); //输出私有变量name
}
}

上面的就叫做static静态方法,注意:
(1)它不属于某个具体的对象,是类方法
(2)不能在静态方法中访问非静态变量
(3)可以通过静态方法来访问类,且不需要实例化对象
class People{
static String name;
static int age;
public static void show(String name,int age){
System.out.println(name);
System.out.println(age);
}
}
public class Test_4 {
public static void main(String[] args) {
People.show("zhang",20); //通过静态访问需拿类名访问,且不需要实例化对象
}
}


5.代码块
代码块分为普通代码块,构造代码块(也叫实例代码块),静态代码块
(1)普通代码块(定义在方法中的代码块)

(2)构造代码块(定义在类中的代码块)

(3)静态代码块(使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量。)

(4)代码块的执行过程
首先需注意:其一:静态代码块不管生成多少个对象,其只会执行一次
其二:实例代码块只有在创建对象时才会执行
class A{
String name;
int age;
public void show(){
System.out.println(name);
System.out.println(age);
{
System.out.println("执行方法内代码块");
}
}
//构造代码块
{
System.out.println("执行方法外代码块"); //执行前先将代码块进行编译 实例代码块只有在实例化对象时才会执行
}
static {
System.out.println("执行静态代码块"); //静态代码块
}
}
public class Test_7 {
public static void main(String[] args) {
A human = new A();
human.name = "张三";
human.age = 18;
human.show();
}

从上面运行可以看出,程序执行时会先执行静态代码块,然后再执行构造代码块,最后在执行方法代码块。其中要注意的是静态代码块不管在类中的那个位置都会先执行,而构造代码块(实例代码块)只有在实例化对象时才会执行。
望对您有所帮助,不足之处还望指出!