小梁同学 の

Java学习旅途

你好! 这是小梁同学使用 博客 所记录的文章笔记,作为一个初学者的从基础到未来的记录,如果你想和我一起在Java学习路程上坚持下去,欢迎你的关注与指正。

新的将来

万丈高楼平地起,未来只能靠自己
从无到有,从零到一,学习路上没有尽头
每日一文,每日一记,跟着软件向前努力
加油!!!!!

详解代码均在以下标题后的链接中

以下所有有关代码,都是个人在上完课后自己重新敲代码之后所做笔记后上传,并非原搬直接上传,谢谢理解

八.类类型

一.引出

1.创建文件
1.样式

public class 文件名{
 文件中的代码
 }

类:类类型,每个类类型都有自己的名字,类名当前类的名称

public class 类名{
 类中的信息===》变量
 }
2.根据存储数据的特征信息起名

例如:猫 名字特征,年龄特征,品种特征

猫的特征:年龄 明治 品种,===》通过变量方式进行显示==创建模板

Public class Cat{===类类型是一个统称,每一个类类型都有自己的名字,例如该类属于Cat类型

} 》类 就是一个模板》没有具体的数据==》抽象的

3 基于模板进行输入

Cat c = new Cat();》基于模板进行了数据的输入》对象====》给对象的每个特征上输入对应的值。

给特征赋值,特征定义时的数据类型,根据类型进行赋值

pubic class cat{
    String name;
    int age;
    String type;
}
pulic class test{
    public static void main(String[] args){
        Cat c = new Cat();
		c.name="tomcat";
		c.age=1;
		c.type="加菲猫";
        System.out.println(c.name+" "+c.age+" "+c.type);
    }
}
=======================
    tomcat 1 加菲猫
pubic class cat{
    String name;
    int age;
    String type;
}
pulic class test{
    public static void main(String[] args){
        Cat c = new Cat();
		c.name="tomcat";
    // 数据值进行约束,给age赋值时,对数据进行判断
    // 如果数字是大于0的,就给age特征进行赋值
    // 如果数字小于等于0,就给age特征赋予0的值
		int a = 10;
            if(a>0){
                c.age=a;
            }else{
            	c.age=0;
            }
		c.type="加菲猫";
        System.out.println(c.name+" "+c.age+" "+c.type);
    }
}
============================
    tomcat 10 加菲猫
//一个类,可以创建多个对象,每创建一个对象,写一遍if的的逻辑
//if判断逻辑来说,定义方法,有参的方法,数据都需要不同====》有参方法
//给特征赋值,方法传入的参数给特征赋值====》无返回值的方法
//给特征赋值,给特征设置值, set 设置,age
//set和age进行组合,setAge
//特征在哪定义的,setAge的方法写在哪个类中
pubic class cat{
    String name;
    String type;
    int age;
    public void setage(int age1){
        if(age1>0){
            age=age1;
        }else{
            age=0;
        }
    }
}
pulic class test{
    public static void main(String[] args){
        Cat c = new Cat();
		c.name="tomcat";
		c.setage(10);
		c.type="加菲猫";
        System.out.println(c.name+" "+c.age+" "+c.type);
    }
}
===============================
    tomcat 10 加菲猫
2.访问权限修饰符

注意:java中定义类

特征:赋值的问题:特征都用private修饰====私有属性

给特征赋值和取值:public修饰的get set方法进行操作

方法:用public修饰=====公开的方法

遵循原则:属性私有化,方法公开化

//访问权限 修饰符
//private (java关键词)
//private 修饰的变量只能在自己类中进行使用===》进行了约束
public class Cat {
//    特征比较多,赋值,比较乱,每个对象赋值的方式不同
//    统一一个格式,都通过get set方法==============》进行赋值和取值
    private String name;
    private String type;
//    私有的,私有修饰的内容只能在当前类中进行使用,出了类不能使用
    private int age;
//    方法定义 通用性原则
//    哪个对象调用方法,就是给哪个对象的特征赋值
//    方法调用,才能执行
    public void setAge(int age1){
        if (age1>0){
            age=age1;
        }else{
            age=0;
        }
    }
    public int getAge(){
        return age;
    }
    public void setName(String name1){
        name=name1;
    }
    public String getName(){
        return name;
    }
    public void setType(String type1){
        type=type1;
    }
    public String getType(){
        return type;
    }
    public void setName(String name1){
        name=name1;
    }
    public String getName(){
        return name;
    }
    public void setType(String type1){
        type=type1;
    }
    public String getType(){
        return type;
    }
    /*public void printCat(){
//        哪个对象调用方法,打印哪个对象的信息
//        对象打印,方法需要手动的调用
        System.out.println("cat name:"+name+"cat age:"+age+"cat type"+type);
    }*/
//    默认被调用  以后进行对象信息输出时,定义toString方法,对象默认的调用
    /*
    * 如果一个类中,没有书写toString的方法,创建的当前类的对象打印的是对象的地址
    * 如果一个类中,写了toStirng方法,创建的当前类的对象打印的是toString方法中字符串信息
    * */
    public String toString(){
        return "cat name:"+name+",cat age:"+age+",cat type: "+type;
    }
}
pulic class test{
    public static void main(String[] args){
        Cat c = new Cat();
		c.setname("tomcat");
		c.setage(10);
		c.settype("加菲猫");
        System.out.println(c);
    }
}
============================
    cat name:tomcat,cat age:10,cat type: 加菲猫
3.this 当前对象

谁现在调用了方法,谁就是当前对象:局部变量和全局变量重名,this关键词进行区分

public void setAge(int age){
        if (age1>0){
            this.age=age;
        }else{
            this.age=0;
        }
    }

二.构造方法

1.构造方法与冒泡排序结合
public class student{
    private String name;
    private int no;
    private int score;
    
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getNo(){
        return no;
    }
    public void setNo(int no){
        this.no=no;
    }
    public int getScore(){
        return score;
    }
    public void setScore(int score){
        if(score > 0){
             this.score=score;
        }
    }
    @Override
    public String toString() {
        return "Student{" +
                "name=" + name +
                ", no=" + no +
                ", score=" + score +
                '}';
    }
}

public class test{
    public static void main(String[] args){
        Student s = new Student();
        s.setName("张三");
        s.setNo(1001);
        s.setScore(100);

        Student s1 = new Student();
        s1.setName("李四");
        s1.setNo(1002);
        s1.setScore(60);

        Student s2 = new Student();
        s2.setName("王五");
        s2.setNo(1003);
        s2.setScore(70);

        Student s3 = new Student();
        s3.setName("赵六");
        s3.setNo(1004);
        s3.setScore(90);

        Student s4 = new Student();
        s4.setName("魏七");
        s4.setNo(1005);
        s4.setScore(80);
        
        Student[] stus = {s,s1,s2,s3,s4};
        for(int i=0;i<stus.length-1;i++){
            for(int j=0;j<stus.length-1-i;j++){
                if(stus[j].getScore()>stus[j+1].getScore()){
                	Student tmp=stus[j];
                    stus[j]=stus[j+1];
                    stus[j+1]=tmp;
                }            
            }
        }
        
        //输出结果,for循环
        //for(int i=0;i<stus.length;i++){
        //    System.out.println(stus[i]);
        //}
        
        //foreach循环 增强for  输出结果  不涉及下标操作
        for(Student a:stus){
            System.out.println(a);
        }
    }
}
===================================================
Student{name=李四, no=1002, score=60}
Student{name=王五, no=1003, score=70}
Student{name=魏七, no=1005, score=80}
Student{name=赵六, no=1004, score=90}
Student{name=张三, no=1001, score=100}
2.构造方法

Java创建对象时,固定的格式:new 调用构造方法,完成对象创建===》构造方法

例:Student s = new Student();

构造方法,格式:

访问权限修饰符 类名(){(固定格式:没有返回值类型)
 构造方法的方法体
}

如果手动书写了构造方法(手动书写的是有参的还是无参),默认的失效

基础创建对象并赋值:

1 创建对象

2 给特征赋值

构造方法,构造对象,小括号可以传值

定义方法,给方法定义参数,调用给参数赋值

==》可以创建对象的同时,给特征赋值

例:

public Student(String name,String no,int score){
    this.no = no;
    if (score>0){
        this.score = score;
    }
    this.name = name;

}
public Student(int score,String name,String no){

}
public Student(){

}
3.方法重载

一个类中,出现了方法名相同,参数列表不同的现象,返回值无关===========》方法重载

参数列表的不同体现在哪:(跟变量名没有关系)

1 体现参数的个数

2 体现参数的类型不同

3 体现参数的类型的顺序

通过构造方法引出了方法重载,但是,不是只有构造方法可以重载,只要满足条件都是方法重载,和返回值无关

public Student(String name){
    this.name=name;
}
public Student(int score){
    if (score>0){
        this.score = score;
    }

方法调用时,传入的参数的个数,类型,顺序进行方法的区分,进行方法的调用,根据传入的参数自动的选择方法进行执行

4.this()进行构造方法的调用

this关键词和this()区别:

this 当前对象,可以使用this进行全局变量和局部变量的区分,this可以放在方法的任意位置

this()用来调用构造方法的,必须放在构造方法第一句

//    减少冗余==========》if score判断 一次书写,多次使用=======》方法 定义,方法调用
//    构造方法进行score逻辑判断时,写在当前的构造方法中============》定义方法
public Student(int score){
	if (score>0){
	this.score = score;
	}
}
public Student(String name,String no,int score){
//        要使用一个score参数的构造方法============》方法调用 执行方法的逻辑
//        this() 用来调用构造方法
        this(score);
        this.no = no;
        this.name = name;

}
public Student(int score,String name,String no){
	this(score);
	this.no = no;
	this.name = name;
}
public Student(){
}
public Student(String name){
	this.name=name;
}
//构造方法的调用
public class Num{
    private int a;
    private int b;
    public Num(int a){
        this(a,10);
    }
    public Num(int a,int b){
        this.a=a;
        this.b=b
    }
    @Override
    public String toString() {
        return "Num{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}
public class test{
    public static void main(String[] args){
        Num n = new Num(10);
        System.out.println(n);
        Num n1 = new Num(10,20);
        System.out.println(n1);
    }
}
=================================
    Num{a=10, b=10}
	Num{a=10, b=20}

三.引出封装和继承

Java中封装

定义一个类,类中进行逻辑实现,属性的书写,属性的赋值,方法的功能逻辑

===》跟类相关的内容,被class文件包裹,通过类进行了封装

继承的引出:

类和类之间的现象:

类的相同的特征和行为,进行了封装,封装到了类中

==========可以进行类的使用,创建对象,给对象赋值,调用方法

//继承引出
public class Cat {
    private String name;
    private int age;
    private String type;

    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 String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}
public class Dog {
    private String name;
    private int age;
    private String color;

    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 String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}
public class Rabbit {
    private String name;
    private int age;
    private int weight;
    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 getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
}

封装了三个类,三个类都有name的属性和age的属性,name和age的属性不同的类中

重复多次出现了,属性重复,给属性赋值和取值的getset

===》属性和方法只能放在类中一次定义

类和类之间重复的代码抽离,抽离到另一个类中,进行代码的一次书写

//类和类之间共同的代码,提取到另一个类中,完成一次定义
public class Animal {
    private String name;
    private int 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 class Cat {
    private String type;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}
public class Dog {
    private String color;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}
public class Rabbit {
    private int weight;
    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
}

java入门基础—1.3----上一章节: 跳转 java入门基础—1.5----下一章节: 跳转