1.java学习记录
1.方法的重载
重载换而言之其实就是函数名不变,但是其中的参数需要改变,可以三个方面改变(参数类型,参数顺序,参数个数这三个方面入手,这样可以运用的)
但是:注意访问修饰符或返回值设置不同,而参数设置相同时,无法构成方法的重载。
public class Test {public Test(){System.out.println("无参构造方法");}public Test(int a){System.out.println("单参构造方法 a:"+a);}public Test(int a, String b){System.out.println("无参构造方法 a:"+a +"b:"+b);}public static void main(String[] args) {new Test();new Test(1);new Test(1,"1");}
}
2.封装
4.1 什么是封装
当我们需要安全地访问对象时,例如限制给对象赋值的范围(避免数据类型的不同或者数据范围超出预计),我们就需要使用封装技术。
封装就是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法(如set或者get)来实现对隐藏信息的操作和访问。
方法封装的主要优点包括:
代码抽象: 将复杂的操作和算法封装在方法中,使得调用者只需要关注方法的用途,而无需关心具体的实现细节。
隐藏实现细节: 封装隐藏了方法的具体实现,从而防止外部代码直接访问或修改内部逻辑,提高了信息隐藏和安全性。
提高可读性: 使用有意义的方法名和参数,使代码更易于理解和阅读,降低了理解和维护代码的难度。
提高可维护性: 修改方法的实现只需要在方法内部进行,不影响外部调用者的代码,从而减少了代码变更的影响范围。
代码重用: 封装的方法可以在不同的地方重复使用,避免了代码的重复编写,提高了代码的重用性。
用封装的方法,计算圆的面积
class Circle {private double radius;public Circle(double r) {radius = r;}// 封装的方法,计算圆的面积public double calculateArea() {return Math.PI * radius * radius;}
}public class Main {public static void main(String[] args) {Circle circle = new Circle(5.0);// 调用封装的方法,计算圆的面积double area = circle.calculateArea();System.out.println("Circle Area: " + area);}
}
2.每日一题
最短路计数
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
long long dis[1000006];
int vis[1000005];
int head[1000005];
long long ans[1000005];
struct edge
{int to;int w;int next;
}e[5000005];
struct node
{int dis,pos;bool operator <(const node &a)const{return a.dis>dis;}
};priority_queue <node> q;void addedge(int x,int y,int z)
{cnt++;e[cnt].to=y;e[cnt].w=z;e[cnt].next=head[x];head[x]=cnt;
};int main()
{cin>>n>>m;for(int i=1;i<=n;i++)dis[i]=0x3f3f3f3f;dis[1]=0;ans[1]=1;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;addedge(x,y,1);addedge(y,x,1);}q.push((node){0-dis[1],1});while(!q.empty()){node tmp=q.top();q.pop();int pos=tmp.pos;int d=tmp.dis;if(vis[pos]==1)continue;vis[pos]==1;for(int i=head[pos];i!=0;i=e[i].next){if(dis[e[i].to]>dis[pos]+e[i].w){dis[e[i].to]=dis[pos]+e[i].w;ans[e[i].to]=ans[pos];q.push((node){0-dis[e[i].to],e[i].to});}else if(dis[e[i].to]==dis[pos]+e[i].w){ans[e[i].to]+=ans[pos];ans[e[i].to]%=100003;}}}for(int i=1;i<=n;i++){printf("%lld\n",ans[i]);}return 0;
}