类和对象static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。
类和对象
static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。
类方法/变量由类调用,成员方法/变量由实例调用。
this 总是指向调用该方法的对象(不是类)。
方法详解
方法所属性(static决定)
形参,实参的传递(值传递,注意引用变量传递的区别)
形参个数可变(放在形参类型后)
方法的重载(返回值不同或者形参个数不同)
递归方法
成员变量和局部变量
package程序第一行,只能一个
import导入指定包层次下某个类或全部类
importstatic静态导入用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。
构造器
构造器最大的用处就是在创建对象时执行初始化
构造器重载(形参列表不同)
构造器调用另一个构造器需使用this关键字,而且必须作为构造器执行体的第一条语句。
类的继承
Java子类不能获得父类的构造器
重写父类的方法要遵循“两同两小一大”的规则。两同:方法名、形参列表相同;两小:返回值类型,抛出异常类;一大:访问权限。(重写方法,覆盖方法和被覆盖方法要同时为实例方法,或者类方法)
super在子类中调用父类被覆盖方法;在子类中调用父类构造器。
多态
相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,就是多态。
java允许将子类对象直接赋给父类引用变量。(向上转型upcasting)
编译时类型转换成运行时类型,需要强制类型转换,要借助于类型转换运算符。
instanceof:前一个 *** 作数通常是一个引用类型变量,后一个通常是一个类或者接口。昌平北大青鸟发现用于判断前一个对象是否是后面的类或者其子类、实现类的实例。
instanceof前面 *** 作数的编译时类型要么与后面类相同或者与后面类具有父子继承关系,否则会编译错误。
import javaioBufferedReader;
import javaioInputStreamReader;
public class Demo {
public static void main(String args[]) {
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(Systemin));
int i = 0;
int j = 0;
String temp = null;
try {
Systemoutprintln("请输入第一个数字: ");
temp = brreadLine();
i = IntegerparseInt(temp);
Systemoutprintln("请输入第二个数字: ");
temp = brreadLine();
j = IntegerparseInt(temp);
Systemoutprintln(i + "/" + j + "=" + (i/j));
}catch(Exception e) {
eprintStackTrace();
}finally {
Systemoutprintln("程序结束!");
}
}
}
程序我测试过了,无问题,不过我是用UTF-8的编码形式写的,如果出现编码问题的错误,你按照我写的重新自己写一遍,就OK了,祝你学习顺利!!!!
public class Test {
static int gmCount = 0;
static int gtCount = 0;
static int tmCount = 0;
static int ttCount = 0;
static int exit = 1;
static int type = 0;
static int ticketType = 0;
static int number = 0;
public static void main(String[] args) {
according();
while (exit!=0){
type = accordingIn("输入1个人、2团体");
if(type==2){
number = accordingIn("团体输入人数");
if(number == 0){
break;
}
}else if(type == 1) {
number = 1;
}
else {
break;
}
ticketType = accordingIn("输入1门票、2通票");
if(ticketType==0){
break;
}
sellTicket(type,ticketType,number);
}
Systemoutprintln("今日个人门票出售"+gmCount+"张,共计:"+gmCount80+"元,团体门票出售"+tmCount+"张,共计"+tmCount60+"元");
Systemoutprintln("今日个人通票出售"+gtCount+"张,共计:"+gtCount100+"元,团体通票出售"+ttCount+"张,共计"+ttCount80+"元");
}
static void according(){
Systemoutprintln("---------------------");
Systemoutprintln("------电子售票系统-----");
Systemoutprintln("----------------------");
Systemoutprintln("--------个人-----团体--");
Systemoutprintln("--门票---80-------60---");
Systemoutprintln("--通票---100------80---");
Systemoutprintln("----------------------");
Systemoutprintln("输入0退出系统");
}
static int accordingIn(String message){
Scanner scanner = new Scanner(Systemin);
Systemoutprint(message + ":");
return scannernextInt();
}
static void sellTicket(int type,int ticketType,int number){
//个人门票
if(type==1&&ticketType==1){
gmCount =+ number;
}
//个人通票
if(type==1&&ticketType==2){
gtCount =+ number;
}
//团体门票
if(type==2&&ticketType==1){
tmCount =+ number;
}
//团体通票
if(type==2&&ticketType==2){
ttCount =+ number;
}
}
}
一共三个类:ScoreArrayjava、StudentScoreArrayjava和Test1java,具体为:
public class ScoreArray {
private int[] scores;
private int scoreCount;
public int[] getScores() {
return scores;
}
public int getScoreCount() {
return scoreCount;
}
//构造函数
public ScoreArray(int[] scores) {
thisscores = scores;
for (int score : scores) {
if (score >= 0 && score <= 100) {
thisscoreCount++;
}
}
}
//求最大值
public int getMax() {
int[] scores = thisscores;
int temp;
for (int i = 0; i < scoreslength; i++) {
for (int j = 0; j < scoreslength - 1 - i; j++) {
if (scores[j] > scores[j + 1]) {
temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
return scores[scoreslength - 1];
}
//求最小值
public int getMin() {
int[] scores = thisscores;
int temp;
for (int i = 0; i < scoreslength; i++) {
for (int j = 0; j < scoreslength - 1 - i; j++) {
if (scores[j] > scores[j + 1]) {
temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
return scores[0];
}
//求均值
public double getAvg() {
int sum = 0;
for (int score : thisscores) {
sum += score;
}
return new BigDecimal(sum)divide(
new BigDecimal(thisscoreslength),
2, BigDecimalROUND_HALF_UP)doubleValue();
}
//排序
public void sort() {
int temp;
for (int i = 0; i < thisscoreslength; i++) {
for (int j = 0; j < thisscoreslength - 1 - i; j++) {
if (thisscores[j] > thisscores[j + 1]) {
temp = thisscores[j];
thisscores[j] = thisscores[j + 1];
thisscores[j + 1] = temp;
}
}
}
}
//静态说明类
public static void explain() {
Systemoutprintln("本类[ScoreArray]实现了数组的:求最值[getMax()]、求均值[getAvg()]和排序[sort()]方法");
}
}
public class StudentScoreArray extends ScoreArray {
public StudentScoreArray(int[] scores) {
super(scores);
}
//统计
public void statistic() {
supersort();
Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i : supergetScores()) {
if (mapcontainsKey(i)) {
mapput(i, mapget(i) + 1);
} else {
mapput(i, 1);
}
}
mapforEach((k, v) -> Systemoutprintln("分数为[" + k + "]的人数为:[" + v + "]"));
}
//静态说明类
public static void explain() {
Systemoutprintln("本类[StudentScoreArray]实现了数组的:求最值[getMax()]、求均值[getAvg()]、排序[sort()]和分布统计[statistic()]方法");
}
}
public class Test1 {
public static void main(String[] args) {
int[] scores = {59, 60, 82, 58, 71, 99, 0, 59, 65};
ScoreArray scoreArray = new ScoreArray(scores);
ScoreArrayexplain();
Systemoutprint("数组内容:[");
for (int i : scoreArraygetScores()) {
Systemoutprint(i + " ");
}
Systemoutprintln("]");
Systemoutprintln("有效值个数:" + scoreArraygetScoreCount());
Systemoutprintln("最大值:" + scoreArraygetMax());
Systemoutprintln("最小值:" + scoreArraygetMin());
Systemoutprintln("平均值:" + scoreArraygetAvg());
scoreArraysort();
Systemoutprint("排序后数组内容:[");
for (int i : scoreArraygetScores()) {
Systemoutprint(i + " ");
}
Systemoutprintln("]");
Systemoutprintln("");
Systemoutprintln("========华丽的分割线========");
Systemoutprintln("");
StudentScoreArray studentScoreArray = new StudentScoreArray(scores);
StudentScoreArrayexplain();
Systemoutprint("数组内容:[");
for (int i : studentScoreArraygetScores()) {
Systemoutprint(i + ",");
}
Systemoutprintln("]");
Systemoutprintln("有效值个数:" + studentScoreArraygetScoreCount());
Systemoutprintln("最大值:" + studentScoreArraygetMax());
Systemoutprintln("最小值:" + studentScoreArraygetMin());
Systemoutprintln("平均值:" + studentScoreArraygetAvg());
studentScoreArraysort();
Systemoutprint("排序后数组内容:[");
for (int i : studentScoreArraygetScores()) {
Systemoutprint(i + " ");
}
Systemoutprintln("]");
Systemoutprintln("分数分布统计:");
studentScoreArraystatistic();
}
}
其中对StudentScoreArray类我要特别说明一下:
统计分布情况时,使用了Map,map是一种key-value的数据结构,其有个特点被我所利用:一个map中只能同时存在一个key,所以我以分数为key,以数量为value,遍历分数数组时,如果是第一次遇到这个key(分数),则将其value(数量)置为1;如果已经不是第一次遇见了,则将其value(数量)置为value + 1(数量 + 1)。另外需要遍历这个map实现统计结果的打印,我这里使用了java8以后才支持的Lambda表达式,所以你要运行这个程序必须要使用jdk18以上的版本。如果你觉得这样不妥,可以网上再搜一下map的遍历方式。
运行结果:
啊 代码又一坨的的挤在一起了,百度知道这个真是无语,我把几个关键的地方截个图给你康康:
ScoreArrayjava
成员变量和构造函数
忘了说了,构造的同时还统计了有效分数(0~100)的数量
求最大值
冒泡排序后取最大值
求最小值
冒泡排序后取最小值
求均值
利用java 的BigDecimal类解决除法运算精度的问题,四舍五入并保留了两位小数
排序
就是冒泡排序,从小到大
静态的文本说明
StudentScoreArrayjava:
继承
分数分布统计
注意我说的map那里
静态说明文本
Test1java:
测试用例都使用的数组:int[] scores = {59, 60, 82, 58, 71, 99, 0, 59, 65};
以上就是关于昌平北大青鸟分享java面向对象全部的内容,包括:昌平北大青鸟分享java面向对象、使用java面向对象程序编程 要简单易懂、Java面向对象的程序设计综合题求大神解答等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)