【群内问题学期汇总】初学者的部分参考问题

本学期,收获了很多群友的问题,这里简单总结一下,希望会对大家有所帮助。

(作者壁纸镇贴)

目录

1、super()的使用

2、排序基本方法

3、方法重载(overloading)和重写(overiding)

4、strictfp的使用

5、除运算和模运算

6、返回值的拓展

7、main方法

8、java命名注意事项

9、强制转型及其限制条件

10、括号、变量等的对应关系

11、编译环境探索总结

12、eclipse界面美化(背景转换)

13、窗口界面制作(swing和awt)

14、短路(&&)和 按位(&)

15、有关自学的碎碎念



(提示,电脑阅读时可以点击左侧目录,自动跳转到指定区域)


1、super()的使用

要说super就先要说this。
"this",作为一个特殊的关键字,它的规则如下:

  1. 可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。
  2. 可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个不可变(final)的普通变量,此变量有静态类型,就是当前类(class)本身;同时此变量也有动态类型,就是当前对象(new class)的类型。你可以对它调用成员函数、成员变量,把它传递给别的函数等。


"super",和"this"类似,但是也有不同的地方。

  1. 表示调用父类的构造方法。也是一个特殊语法,不是变量,没有什么类型。子类构造器会默认调用父类的无参构造,即:super();如果我们要手动调用,则需要注意super关键词一定要放在子类构造器的第一行。
  2. 可以在一个类的非静态(static)成员内部使用,比如super.变量名;super.方法名;(静态比较害羞,不能调用非静态方法或变量)本质上,super不是变量,仍然是特殊语法。

  3. super依赖继承关系,如果没有继承关系,也就没有super的出现。而且只能出现在子类的构造方法或者方法中。

  4. 由于super和protected的关系很好,所以protected在继承关系里面用的挺多(不是)在这里插入图片描述

2、排序基本方法

很多,但首推选择法和冒泡法,另外二分法排序和查找在面试里问的比较多。

/**以选择法为例*/
for(j=input-1;j>0;j--)
for(i=0;i<j;i++)
 if(n[i]>=n[j])
{temp=n[i];n[i]=n[j];n[j]=temp;}
//交换,temp初始值为0。结果从小到大
	
/**以冒泡法为例*/
for(j=1;j<input;j++)
for(i=0;i<input-1;i++)
 if(n[i]>=n[i+1])
{temp=n[i];n[i]=n[i+1];n[i+1]=temp;}
//交换,temp初始值为0。结果从小到大

别问,问就是不会二分法,到时候现用现学(哼) 

3、方法重载(overloading)和重写(overiding)

 认清一点,重载是一个类里面的概念,重写是多个类里面的概念。

一个类,要想方法适用性更广,就会选择重载

重载注意事项:

  1. 方法名必须相同
  2. 参数列表必须不同
  3. 返回类型看个人,可变可不变

当存在继承关系后,由于父类方法不一定适合子类使用,所以需要重写

重写注意事项 :

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符的范围可以扩大,但不能缩小
    (public>default>protected>private)
  4. 抛出的异常范围可以被缩小,但不能被扩大

4、strictfp的使用

 strictfp是strict float point的缩写,指的是精确浮点,用来确保浮点数运算的准确性。因为是修饰符,所以想用的话就加在class前面

随便找了个类测试一下(虽然加和不加,答案都没啥区别) 

5、除运算和模运算

看例子就行

除:5/3=1 ; 5/-3=-1  ; -5/3=-1 ; ;-5/-3=1 ;

模:5%3=2 ; 5%-3=2  ; 3%5=2 ; 3%-5=2 ; -3/-5=-2 ; 15.2%5=0.2 ;

6、返回值的拓展

 设置方法的时候必须要给方法一个返回值类型,或者直接不返回(void)。但其实返回值的类型是可以转化的,比如下面的这段

 java支持返回值的自动转型,也就是向下兼容。emmm,简单来说就是扩大返回值类型。不懂的话看例子也懂了,报错了就是错滴。

7、main方法

每个类(class)可以有也可以没有main方法,

甚至所有类里可以都没有main方法。如果你想从某个类做为入口开始运行整个程序。那么就把他设成 public ,之后在里面写个main方法作为入口

需要注意的是,一个类只能有一个main方法,但是一个大文件可以有多个类,相应的也有多个main方法作为入口。

我们常用的test类也是参照了上面这几个习惯。

8、java命名注意事项

 可以看到,类名是String,好巧不巧就真的和Object里的String重名了。方案1是通过提示选择正确的包路径,方案2是通过重构修改类名解决问题。这里不建议大家用这些词当做类名和方法名,不然的话到最后会和出现矛盾的地方,查bug的时候就很无奈。

所以大家,名字尽量取的奇怪一点呀,不要学到啥就取那个名字!

9、强制转型及其限制条件

在java中强制类型转换分为基本数据类型(primitive type)和引用数据类型(reference type)两种。

基本数据类型的强制转型中,遵循大转小需要使用,小转大默认使用的原则(这里的大小指的是定义范围的大小,不是具体数值的大小),例子如下:

 可以看到,强制转换就是在变量前加上(对应类型)就行啦

引用数据类型的强制转型中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。例子如下:

Father father = new  Father();//加粗类型为引用类型

Son son = (Son) father;//强制转型失败,将加粗类型改为Son则成功

10、括号、变量等的对应关系

如果是在纸上看的话,很容易会把括号看混,有些变量甚至都不明白对应关系,但是不用慌,每个编译器都自带了括号和变量的对应功能,只要点击那半个括号,立刻就你让你在代码堆里面看到另外一个对应的括号啦。

例如,我点击了44行的大括号,系统自动给我标注了48行对应的大括号。

变量标注的话我记得idea提供了这个功能,我这个编译器好像没有emmm。 

11、编译环境探索总结

如果你发现程序能正常运行,说明代码本身问题不大。但如果输出的符号全是乱码,基本可以判定是底层编译环境的问题,乱码的产生主要是编码和解码的规则不一致。目前遇到的难点主要是中文解码出现乱码,而英文和数字不影响。这就要提到常用的两个汉字编译规则了。

GBK ,一个汉字占用2个字节。     

UTF-8 ,一个汉字占用3个字节。

 实际操作也是按照统一修改的原则,GBK对应GBK(虽然不能涵盖所有汉字),UTF-8 对应UTF-8 。修改路径视编译器类型决定,这里跳过。

12、eclipse界面美化(背景转换)

通过  窗口-->首选项-->常规-->外观  的操作,进入到eclipse的界面选择,不下载其他美化包的话只有四种选项,我个人常用的就是暗色(没汉化的按英文找到对应路径)

13、窗口界面制作(swing和awt)

 一般建议上网系统学习,并且考试不会考到,所以这里只给出大体框架。

14、短路(&&)和 按位(&)

&(按位与)和&&(逻辑与),区别就是前者逐一执行判断,后者判断出现0就停止执行。同样的思路可以套用到 |(按位或),||(逻辑或)上。习惯称“逻辑”为“短路”。所以也有“短路与”和“短路或”的称呼,具体来源参考了物理上短路的现象。

15、有关自学的碎碎念

  这学期java是双语教学,学起来比较费脑筋,但作为编程从事人员,迟早会用到英文编程的,国外GitHub网站发展很好,同时计算机的一些底层逻辑也按照英文设计。同时自学的地位也越来越受大家关注。

  我想说的是什么呢,任何事物都有适应的过程,你可能会对java双语教学望而却步,也可能在适应英语的过程中丢失了本身母语的魅力。但是不要忘记,在你手上的是工具,不是枷锁,你要做的是适应然后使用工具,而不是被工具磨出厚厚的老茧而不知情。

  那么我们要怎么学习Java课程呢?我的学习路线是视频+课堂,先看看视频讲的啥,到时候上课双语教学也能有底气去思考,不然就是从头到尾被拖着走。这里我推荐【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 这个网址,别看名字起的不咋地,但是好就好在能系统的上手java的功能和语法。

  其次就是平时多逛逛论坛,CSDN、博客园(多看看上面的代码,有了最初的代码积累才能干点别的。当你所有程序的代码量累计到100行时,可以开始考虑使用注释了(//这是行注释)至于注释内容,因个人而异,我的理解是本人写的代码都是给中国人看的,理应方便中国人,不是折磨自己去搜有道翻译。所以肉眼可见,我的代码含“中”量挺高,况且这样看着也不无聊是吧。


(当然啊,到了企业别说是我让你们全用中文啊,有时候老板看不懂的东西才是好东西)

    后来想想,如果说c语言是高级语言的鼻祖,那么java就是忠实的拥护者了,虽然运行效率不如c++,但是开发效率是甩c一大截的。可能也会有人说python,然后联想到爬虫,但是说实话,以现在互联网安全意识,你做的爬虫未必能爬几个官方网页,就连百度百科你都要越过好几层墙。况且爬虫每个编程语言都能做,只是python做的快罢了 。

  同理,我也想让大家明白,编程的意义不是写一堆人偶自娱自乐,而是创造,这个感觉可能在目前教学的前八章很难体现,但是将来面向对象的时候,如果你要定义的话,记住活着的感觉,然后把这种感觉赋予到对象里。这不强求,习惯而已。

    回头看,你会发现老师只能陪伴你走过一小段路,即使是家人也会在你需要独立的时候离开一段时间,所以更多的时候,自己的能力才能派上用场。

希望会对大家有所帮助!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万、宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值