我正在查看某人的其他代码,并使用包名称对其进行编码.
String filename = "";
java.io.PrintWriter writer;
writer = new java.io.PrintWriter(new java.io.FileWriter(filename));
Run Code Online (Sandbox Code Playgroud)
如果语法没有用包名编码,语法是等价的吗?因为Java允许,所以有没有使用包名称编码?
我遇到了这段代码:
public class Board extends JPanel implements ActionListener{
public Board(){
setFocusable(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将setFocusable设为true,那么该方法究竟对JPanel的对象做了什么?关注组件的概念是什么?
基于Java API,此方法位于Component Class(JPanel的超类)中.方法说明指出"将此Component的可聚焦状态设置为指定值.此值将覆盖Component的默认可聚焦性." 这个描述对我来说听起来太技术性和高级行话(他们在夏天刚刚完成了Java课程).有时候,我认为这些方法描述不是为所有具有不同Java知识水平的人编写的.有人可以用非专业术语解释方法描述吗?
我正在创造一个游戏(蛇克隆)作为一种爱好.我正在查看Java API中Graphics类的dispose方法.当我注释掉dispose方法时,我的动画以相同的方式工作,无论是否有它.在Java API中,dispose方法执行此操作 - 释放图形上下文正在使用的系统资源.Java垃圾收集管理程序的内存不是类似于dispose正在做的事情吗?我应该保留处理方法吗?
API在解释同步方法方面没什么帮助.但是从我在其他论坛中读到的内容来看,ToolKit类的sync方法是确保绘图操作(比如我想的paintComponent方法)刷新到显卡.图形卡的工作是清理程序以前的图形上下文的剩余部分吗?
这是代码:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
Run Code Online (Sandbox Code Playgroud) 我让动画在Snake Clone Game中运行.但基于图片的问题是图像没有透明度(注意圆形图片的白色背景.编程方面,是否有一个修复,能够包括这些绘制图像的透明度?
这是包含我的代码和程序输出的图片.

PS在旁注中,我决定粘贴直接链接而不是IMG代码,因为我似乎无法在StackOverFlow上显示它.我在IMG代码的前面加了一个感叹号,但它没有用,所以这里是直接链接.
这是一个例子:
// set up frame, panel
JFrame container = new JFrame("Game Example");
panel = (JPanel)container.getContentPane();
Run Code Online (Sandbox Code Playgroud)
我检查了Java API,并且两个类都实现了相同的接口,这和多态性是为什么?
还是因为两个类都通过继承从Component类继承?
通常,当您创建一个对象时,您在前面提供了相同的类型,如:
Scanner scanner = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)
但声明一个HashMap对象和TreeMap遵循这样的不同语法.
Map m1 = new HashMap();
SortedMap sm = new TreeMap();
Run Code Online (Sandbox Code Playgroud)
是什么原因?我问我的教授.但他不知道答案.
我开始玩别人的其他代码并遇到了一个有趣的实验.该程序将与if语句一起正常工作.但我发现如果我将if语句更改为while循环,程序会运行,但我无法使用X按钮关闭程序,而是必须按Eclipse终止按钮.我猜这是一个无限循环的标志,还是Java不能反复重复绘制相同的图像?
// if you want to draw graphics on the screen, use the paintComponent method
// it give you a graphic context to draw on
public void paintComponent(Graphics g){
super.paintComponent(g);
// when the player is still in the game
if(inGame){
g.drawImage(apple, apple_x, apple_y, this);
for (int z = 0; z < dots; z++) {
if (z == 0)
g.drawImage(head, collisionX[z], collisionY[z], this);
else g.drawImage(tail, collisionX[z], collisionY[z], this);
}
Toolkit.getDefaultToolkit().sync();
// dispose graphics and redraw new one
g.dispose();
}
else gameOver(g); …Run Code Online (Sandbox Code Playgroud) 程序员大家好.我有一个关于静态的问题和在Java中使用这个例子的点运算符.
所以我在Inventory类中有一个ArrayList的类变量声明.
static List<Multimedia> list = new ArrayList<Multimedia>();
Run Code Online (Sandbox Code Playgroud)
如果我选择在方法中使用ArrayList的add方法,我应该像这样编写方法调用:Inventory.list.add(Object o)或者我应该使用list.add(Object o).他们的意思是一样的吗?如果不是,我应该使用哪种方法调用?
我发现C#的这个功能"命名参数"真的很奇怪,因为我看到了它的两个缺陷.该书说"命名参数赋予你"以任何顺序传递参数的能力".
我认为这个C#功能存在两个缺陷:
它违反了计算机科学中的"信息隐藏".(即:使用该方法的最终用户需要知道参数名称和数据类型才能使用该功能.)来自Java背景,这很奇怪.为什么要将参数名称暴露给用户的末尾?
它容易产生歧义,可能导致错误.(当程序员编写使用相同方法名称(也称为重载方法)的方法时,程序员需要进行额外的思考和问题.当你有两个同名的方法时,你总会得到一个"调用是不明确的"即使另一个方法具有不同数据类型的额外参数,彼此具有相同的参数.我能想到的唯一修复是使数据类型成为"强制参数",也就是没有默认值的参数,因此编译器会不要混淆.但是这个修复只是一个导致另一个最坏情况的绷带解决方案(见下文)
业内人士甚至在今天都使用这个概念吗?如果是这样,为什么要打破这两条规则"在调用方法时以任何顺序传递参数的能力"?
TLDR:通过引入可能的最坏情况场景(编译器选择了错误的方法调用......尽管两种方法相似)来清楚地说明我所说的内容:
namespace ConsoleApplication1
{
class Venusaur
{
static void Main(string[] args)
{
new Venusaur().optMethod(fourth: "s");
}
public void optMethod( string third , string fourth = "hello", int fifth = 23, string two = "w")
{
// what if I wanted this method to run instead of the method below me
Console.WriteLine("did not execute");
}
public void optMethod(string third = "Byte", string fourth = "hello", int fifth = 4)
{
// But this method ran instead …Run Code Online (Sandbox Code Playgroud) java ×8
graphics ×2
methods ×2
object ×2
arguments ×1
arraylist ×1
c# ×1
casting ×1
dispose ×1
focusable ×1
hashmap ×1
imageicon ×1
infinite ×1
inheritance ×1
interface ×1
jpanel ×1
loops ×1
package ×1
parameters ×1
polymorphism ×1
static ×1
swing ×1
sync ×1
toolkit ×1
transparency ×1
treemap ×1