public class Simple {
public float price;
public static void main (String[] args) {
Simple price = new Simple ();
price.price = 4;
System.out.println(price);
}
}
输出应该是什么?为什么?对象值还是4.0?
答案 0 :(得分:1)
它们没有相同的范围(或者它们是相同的变量)。 narrowest 范围内仍包含用法的变量是使用的变量。
class customCell: UICollectionViewCell{
var imgView = UIImageView()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
func commonInit(){
imgView.translatesAutoresizingMaskIntoConstraints = false
self.addcontentView.addSubview(imgView)
//add constraints
}
}
class CollectionViewController: UICollectionViewController {
private let imageLib = [...] //image file name strings
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell : IconCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(keyIconCellReuse , forIndexPath: indexPath) as! IconCollectionViewCell
let image1 = (UIImage(named: imageLib[indexPath.row])?.imageWithRenderingMode(.AlwaysTemplate))!
cell.imgView = UIImageView(image: image1)
cell.imgView.tintColor = UIColor(white:0, alpha:0.7)
cell.userInteractionEnabled = true
return cell
}
}
输出
public static class Simple {
public float price;
public static void main(String[] args) {
// Narrower scope than the instance variable.
Simple price = new Simple();
price.price = 4;
// Uses the narrower one (the Price, not the float).
System.out.println(price);
}
}
答案 1 :(得分:1)
输出应该是什么?为什么?对象值还是4.0?
对象值...因为在main
方法中,局部变量price
将隐藏实例变量price
。
(实际上,println
方法在对象上调用toString()
并打印出结果字符串。但我猜你知道这一点。)
在Java类中,我可以看到类对象和变量可以具有相同的名称。如果它们具有相同的范围,将打印哪个值?
在您的示例的上下文中没有意义,因为局部变量和实例变量不具有相同的范围。
(更重要的是,即使实例字段price
未被隐藏,您仍然无法使用System.out.println(price);
进行打印,因为您无法参考像static
方法中的实例变量一样。您无法隐式或明确地在this
方法中引用static
。)
答案 2 :(得分:0)
因为price是在主方法范围中声明的引用变量 ,而不像在float price
类范围中声明为实例变量的Simple
。
例如,如果您在System.out.println(price);
构造函数中添加Simple
,则必须打印 4.0 ,因为他会查找在那里声明的变量引用。