首页 > 编程语言 >JAVA零基础小白自学日志——第七天

JAVA零基础小白自学日志——第七天

时间:2024-07-06 20:27:55浏览次数:12  
标签:JAVA String 对象 class 实例 end 日志 Hello 第七天

文章目录


今日提要:类和对象(什么?你说你没对象!?去去去,别打岔,我这对象不是你那个对象,你那个自己去找,我这不管跑媒拉纤!!!!)

那问题来了,这里的对象又是什么呢?怎么获得呢?那就好好学吧,没准还真能找到你那个对象呢,很老很老的话说么:“书中自有颜如玉么”

老规矩,有请我们的“hello”闪亮登场:

public class Hello {//类
	public static void main(String[] args) {//方法
		System.out.print("Hello Java");//语句
	}//end main()
}//end class

第二天的学习中,我们已经非常非常简单的了解了什么是类,以及类的结构,但是类在Java中是个很重要的概念,并且贯穿始终;

看出我们的“hello”有什么问题了么?其实这段代码本身并没有什么问题,但是如果我们只是把解决问题的过程用语句记录下来,并依次执行,毫无疑问,这是面向过程的,而Java是完全面向对象的,而面向对象是能够最大限度的减轻程序修改所带来的对源程序的损害,也能够为程序片段的复用和协同工作提供最大的便利这是我的理解,因为是边学边写的,理解的有偏差的时候,请指正和理解);
把我们的“hello”先修改一下

public class BeginnerHello {//公共类

	public static void main(String[] args) {//main方法
				
		Hello h = new Hello();//创建对象
		h.helloP();//调用方法		

	}//end main
}// end public class

class Hello{//hello 类

	void helloP () {//helloP方法
			
		System.out.println("Hello Java");//输出“Hello Java”
		
	}//end helloP	
}//end class Hello

这段程序和我们的“hello”输出结果是一样的,但这一次,却是一个最基本的面向对象的结构,而不是面向过程的,可能你就要说了,这不是更复杂,需要更多的代码支持了么?你说的也没错,如果你只是写一个规模很小,参数很少,复用率很低的程序,那么面向对象就会显得很笨拙,但是,如果你输出的结果需要根据大量的参数进行变更,程序片段复用率极高,多人协作的时候,面向对象明显会让你的程序变得更加健壮,更加高效,休假的时间没准也更多(不可能的,黑心老板不会让你休假的…不过么,你可以有更多时间摸鱼,有没有诱惑呢?)
言归正传,现在开始讨论我们今天要学习的知识

一、类

概念:类是什么?具有相同属性的客观实例的抽象(真的是够抽象的,我很想抽…算了,平和平和);
咱们还是换人话说吧,人就是一个类,有脑袋身子胳膊腿,你就知道他是个人(此时我家的狗子从我身边缓缓走过),这个么,你知道我说的是什么了,没那么严谨;人是类,男人也是类,女人也是,猫是类,狗也是类,蔬菜水果等等都是类,它们都是某一类具有相同属性的客观实例的抽象;
你又要说了,你这个“hello”明显不是一个类么;
那我现在除了“Hello Java”以外,我还要输出“Hello 张三”、“Hello 李四”、“Hello 王五”、“Hello 赵六”、“Hello 刘二麻子”…呢?
我们再来改改“hello”

public class BeginnerHello {

	public static void main(String[] args) {
		
		String [] hx = new String[] {"张三","李四","王五","赵六","刘二麻子","Java"};
		Hello h = new Hello();
		
		for (int i = 0; i < 6; i++) {
			h.helloP(hx[i]);
		}

	}//end main
}// end public class

class Hello{
	void helloP (String hTemp) {		
		System.out.println("Hello " + hTemp);//输出“Hello ...”
	}//end helloP	
}//end class Hello

此时的“hello”就变成了“Hello 张三”、“Hello 李四”、“Hello 王五”、“Hello 赵六”、“Hello 刘二麻子”、“Hello Java”这一小堆客观实例的抽象了,甭管要“hello”谁,都要有“hello”,在这个基础上如果你还想“hello”别的什么,你只需要添加你想要的参数就可以了,而且,我说的是而且啊,如果不想“hello”了,你想“kick”了,也只需要把方法helloP(println …)里面的“Hello”,改成“Kick”,即可,是不是很方便?

这里出现了一个新的语句:
String [] hx = new String[] {“张三”,“李四”,“王五”,“赵六”,“刘二麻子”,“Java”};
这是创建一个数组,对,它很像一个对类的调用,因为实际上就是对类的调用,不过这个类特殊,属于内部类而已
我们来说一下几种数组的创建语句:
int [] x = new int[] {1,2,3,4,5};//创建一个整型的数组,数组含有,1,2,3,4,5个值
int [] x = new int[5];//声明一个整型数组,一个含有5个整型数的数组,默认值为0
char [] x = new char[] {‘a’,‘b’,‘c’,‘d’}//一个字符型数组
也就是说你可以创建一个有初值的数组,也可以声明一个没有初值的数组,但是没有初值的数组,你必须声明数组的大小,没有初值的数组不代表没有值,整型默认值为0,字符串默认值为null,布尔类型的默认值为false大致就是这样。

现在我们来说说一个类到底是什么样子的吧:

MyClass int id String name setStudents() getStudents()

由上至下,我们依次分为类名、实例变量、方法,下面,我们依次简单的解说一下这各个部分

1.类名

一个类必须要有类名的,类名是未来程序调用类的基本参数,这个命名一定要易读(最起码对你自己来说,嘿嘿),别回来三天以后再看,都不知道这个类是干什么的了;

class MyClass {//创建一个类 

}// end class MyClass

一个Java程序源文件里面有几个,几十个甚至几百个类,除了一个公共类的类名和源文件文件名相同外,其他类名都可以根据你的爱好(或者甲方爸爸和老板的爱好编制…)

2.这是啥东西?虽然在类里,但是不在构造方法里面,也不在语句块里,它是谁?它要干啥?

这东西有个标准的名字:实例变量…,这名字真找…抽象;
概念上有个非常简单的概述,实例变量里的实例等同于对象,实例变量也就是对象的初始变量参数或者更准确的说是对象的状态,属于对象已知的参数,看完这个解释,吓得我去听了一遍忐忑,终于能不忐忑了。平静下来的我,用小白的眼光重新审视了这个找…抽象的实例变量;
我给了自己一个比较容易理解的解释:
[1].不是类里必须的,可以有可以没有,看需要;
[2].如果你的类里有需要贯穿整个类的变量或参数,那恭喜你,你可以有这个实例变量*(先略过对象和封装的问题,我只是觉得这样解释和理解比较容易)*,这样说可能还不太好理解,那我们举个栗子

class 学生{
    String 校名;
    String 班级;
    string 学生姓名;
    int 学生年龄;
    
    void 学生成绩(){
    }
    int 返回学生排名(){
        return 排名;
    }
}

这不是一个合法的Java程序,这不是一个合法的Java程序,算了不说第三遍了,这个就是个栗子
我们有了一个学生类,然后我们有了学生成绩和学生排名两个方法,可能会有更多的方法,你就当他有就好了,而这些方法都会或多或少的都会用到上面的那些变量,这些变量能够贯穿这个类,这些变量就可以放在这里统一声明,然后大家一起用就好了。首先声明这个解释不太对,甚至是不对,但是在这个阶段可以让我少听几遍忐忑,并且可以理解它存在的意义和用途我觉得就算达到目的了,对于一个初学的小白来说,用人话来解释还是有一定的难度的。

实例变量也是有初值的,默认初值也是:整型默认值为0,字符串默认值为null,布尔类型的默认值为false,实例变量属于该类的对象的(对,就是他媳妇的,呸呸呸,满脑子都想的什么),只有该类的对象才能调用实例变量,记住这句话就好了,一会说到对象的时候,我再想办法翻译成人话。

3.方法

其实说是方法,我觉得还是太概括了,要我说,应该这么说,看我这个类,能鼓捣什么,能折腾什么…呃,我忐忑听多了,方法么,其实就是一个类能做些什么的行为。方法里大量存在的就是语句了,也就是那些可以被重复利用的语句片段了,这个应该不难理解了。
方法我们现阶段能接触到的,也就是无参无返回值的,无参有返回值的,有参的无返回值的,有参有返回值的,第二天的学习里面也说过都是什么样子的了,就不复述了。
以后还会碰到什么构造函数,匿名构造块等等吧,用到再说也不迟,有个概念就行了。

二、对象(重头戏来喽)

重头戏不代表字数很多哦,只是说,很重要,因为这个卡了我好一会呢,不知道别的人学习的时候会不会在这里卡住。

1.类与对象的关系

第一句话:类不是对象;
第二句话:对象由类构造;

好了,我说完了,下课…咦?!这是谁的拖鞋?呀!又一只,为啥是一顺的呢,哎,两个单身狗拖鞋,好了好了,不要扔了,我没打算出去卖一顺的拖鞋,虽然也是个商机,不过可能会挨打,还是算了。
那就先不下课了,不过你听得懂听不懂,我可不管。

2.类不是对象,对象由类构造

更准确的说类是对象的蓝图和模板;对象是类的实例化;这是概念化的解释
下面说我的理解:我把类想象成一个容器,里面有一副人类骨架,实验室那种,都见过吧,还有各种填充骨架的物料(实例变量),还有一套系统用以控制行为(方法),对象赋予了类里各个参数的数值,比如头发多长,眼睛多大,身上有多少肉等等吧,根据这些数据我们就开始在骨架上捏人,到此为止,类就已经实例化了,他就形成了一个具象的某个人了,这时就已经变成我们可以操作的对象了,而我们创造对象的用途,是用来作出各种动作及反应的,所以这个实例是需要有行为的,这个时候,方法就登场了,方法的主要作用就是让这个实例完成要求的各种行为及反应,有时也需要反馈一些信息。

3.类和对象到底在程序里是什么样的

类我们见过很多次了

 class MyClass{//这是MyClass类
  
 }

这个类的对象是什么样的呢,看下面

    MyClass xx = new MyClass();//创建了基于MyClass类的对象

继续看我们的实例,我相信无论何时学习何种程序语言,除去一开始那些需要背下来的基础知识外,大量模拟战,才是王道

public class BeginnerTestDog {//创建一个公共类

	public static void main(String[] args) {//main()函数
		
		//依据DogClass创建一个名为one的对象
		DogClass one = new DogClass();
		one.size = 15;//身长
		one.weight = 3;//体重
		one.breed = "泰迪";//品种
		one.name = "黑漆漆";//名字
		one.dogReaction();//调用方法
		
		//依据DogClass创建一个名为two的对象
		DogClass two = new DogClass();
		two.size = 80;
		two.weight = 60;
		two.breed = "金毛";
		two.name = "老牛牛";
		two.dogReaction();
		
	}//end main
}//end class

class DogClass{
	
	int size;//身长
	int weight;//体重
	String breed;//品种
	String name;//名字
	
	void dogReaction() {
		
		String bark = "汪汪汪";
		
		//判断狗的叫声
		if (weight <= 5) {
			bark = "歪歪歪";
		}else if(weight > 5 && weight <= 15) {
			bark = "汪汪汪";
		}else if(weight > 15 && weight <= 30) {
			bark = "汪呜汪呜汪呜";
		}else if(weight > 30) {
			bark = "嗡呜嗡呜嗡呜";
		}//end if
		
		//输出结果
		System.out.println("一只身长 " + size + " 公分,体重 " + weight + " 公斤,名叫 " + name +" 的 "+ breed + " 正在 " + bark + " 的叫着");	
		
	}//end dogReaction	
}//end DogClass

一句题外话:自己练习的时候,要时刻注意命名规则及注释的清晰度,学习过程是不能偷懒的,只有熟练的掌握,才能在未来收放自如。

我把类想象成一个容器,里面有一副人类骨架,实验室那种,都见过吧,还有各种填充骨架的物料(实例变量),还有一套系统用以控制行为(方法),对象赋予了类里各个参数的数值,比如头发多长,眼睛多大,身上有多少肉等等吧,根据这些数据我们就开始在骨架上捏人,到此为止,类就已经实例化了,他就形成了一个具象的某个人了,这时就已经变成我们可以操作的对象了,而我们创造对象的用途,是用来作出各种动作及反应的,所以这个实例是需要有行为的,这个时候,方法就登场了,方法的主要作用就是让这个实例完成要求的各种行为及反应,有时也需要反馈一些信息。
这段话的意思,我想大家看完上面这段程序,就应该能够明了了,这就是我为什么说,模拟战才是王道,大家多找初级的题目练习,不断的重复才能看清本质。

上面这个程序应该能清晰的反应出类和对象的关系了,这个程序为了能直观的表达实例变量和对象的依存关系,所以没有对实例变量进行封装,而在公共类中直接调用了,这是极不安全的。

今天我们在面向对象的大门前推开了一条缝隙,后面的世界变幻莫测,丰富多彩,期盼能早日达到完全推开大门的一天。

标签:JAVA,String,对象,class,实例,end,日志,Hello,第七天
From: https://blog.csdn.net/mycqyjn/article/details/140137778

相关文章

  • Windows防火墙 日志 自定义 以记录被丢弃的数据包和成功的连接日志。以下是一个示例.r
     配置注册表,以记录被丢弃的数据包和成功的连接日志 WindowsRegistryEditorVersion5.00;WindowsDefender防火墙日志记录设置[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy];以下是针对不同配置文件的设置,例如......
  • 深入Java:JSON解析与操作的艺术
    哈喽,大家好,我是木头左!一、初识JSON:数据格式的优雅舞者在现代Web开发中,JSON(JavaScriptObjectNotation)以其轻量级和易于阅读的特点成为了数据交换的首选格式。它基于JavaScript的一个子集,采用完全独立于语言的文本格式,使得任何编程语言都能够轻松解析和生成。JSON的基本结构......
  • 3101.力扣每日一题7/6 Java(接近100%解法)
    博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • Java计算机毕业设计疫情防控形势下的高校食堂订餐管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着新冠疫情的全球蔓延,公共卫生安全成为了前所未有的重大挑战。高校作为人员密集且流动性大的场所,其食堂管理面临着巨大的疫情防控压力。传统的食堂......
  • Java计算机毕业设计食品安全监督平台的设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着社会经济的快速发展和人民生活水平的不断提升,食品安全问题日益成为社会关注的焦点。近年来,食品安全事件频发,不仅严重损害了消费者的身体健康,也影......
  • 从零学习的JAVAday1~day7
    作为一个刚要迈入大二的预备程序员,已经学习过了c语言和c++的部分知识,在暑假期间满怀期待的开始Java的学习,希望一个暑假可以对Java的了解加深一些。学习Java首先要学习windows电脑的cmd命令:同时点击键盘上面的win+r键输入cmd即可进入默认的cmd面版,然后我们就可以输入一些命令:比......
  • MIT6.824-2022 分布式系统课程实验笔记 Lab 2B Raft-日志复制(Log Replication)--xunznu
    Part2B:LogReplication日志复制(困难)文章目录Part2B:LogReplication日志复制(困难)Lab1:MapReduceLab2:Raft实验解读Lab2A:领导者选举leaderelection我的代码实现(附带详细代码注释)提示:实现细节:1、commitIndex和lastApplied2、nextIndex和matchIndex3、Co......
  • 面试官:Java线程可以无限创建吗?
    哈喽,大家好......
  • 学生Java学习路程-1
    ok,到了一周一次的总结时刻,我大致会有下面几个方面的论述:1.这周学习了Java的那些东西2.这周遇到了什么苦难3.未来是否需要改进方法等几个方面阐述我的学习路程。这周我主要进行了java开发程序EclipseForJavaDeveloper跟jdk的安装,其中在安装jdk过程中,因为没有安装在C盘中,所以......
  • 【Java】毕业设计个人博客系统 ---- 代码+详解
    目录博客系统项目分析1.数据库设计1.1设计库表1.2代码实现1.3创建项目1.4配置application.yml配置文件2.项目公共模块2.1实体类2.2公共层2.2.1统一返回结果实体类2.2.2统一返回结果处理2.2.3统一异常处理3.获取博客列表3.1持久层数据库相关操作3.2约定......