20\21.static关键字

  /**
* static关键字
* 1.用static修饰后的方法,称为静态方法.
* 2.静态的方法特点,可以使用 类名.方法名称 调用方法
* 3.静态方法只能调用静态方法/字段,非静态方法,既可以调用静态方法/字段,也可以调用非静态方法/字段
* 4.被static 修饰后的字段是共享的
*/

  

  

  

  堆栈简单分析:

  

  代码:

 package com.day01.station.staticDemo;

 /**
* Created by Administrator on 2018/3/23.
*
* 类: 方法 (普通方法 构造方法)
* 字段/属性
* 代码块
*/
public class StaticObj {
private String name;
private Integer age;
private static String conuntry; /**
* static关键字
* 1.用static修饰后的方法,称为静态方法.
* 2.静态的方法特点,可以使用 类名.方法名称 调用方法
* 3.静态方法只能调用静态方法/字段,非静态方法,既可以调用静态方法/字段,也可以调用非静态方法/字段
* 4.被static 修饰后的字段是共享的
*/
public static void say(){//修饰的是放方法
//System.out.println("-----我是一个方法---------"+name);
say3();
} public void say2(){
System.out.println("-----我是一个方法2---------"+name+age);
say();
} public static void say3(){
System.out.println("-----我是一个方法3---------");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getConuntry() {
return conuntry;
} public void setConuntry(String conuntry) {
StaticObj.conuntry = conuntry;
}
}

  测试

 package com.day01.station.staticDemo;

 import org.junit.Test;

 /**
* Created by Administrator on 2018/3/23.
*/
public class TestStaticObj {
/**
* 测试目的: 验证加了static修饰的字段只用一份,是共享的
* 创建两个对象 第一个设置国家为中国 第一个设置国家为美国,如果后面的可以覆盖前面的,那么确实是共享的
*/
@Test
public void test3(){
// 创建两个对象
StaticObj staticObj1 = new StaticObj();
StaticObj staticObj2 = new StaticObj(); staticObj1.setConuntry("中国"); staticObj2.setConuntry("美国");
String conuntry2 = staticObj2.getConuntry();
System.out.println("conuntry2= "+conuntry2); String conuntry1 = staticObj1.getConuntry();
System.out.println("conuntry1= "+conuntry1); // System.out.println(" staticObj1= "+staticObj1);
// System.out.println(" staticObj2= "+staticObj2);
}
@Test
public void test2(){
StaticObj.say();
}
@Test
public void test(){
//以前
StaticObj staticObj = new StaticObj();
staticObj.say(); }
}

22.构造代码块与静态代码块

  代码:

 package com.day01.station.model;

 /**
* Created by lidongping on 2018/5/2.
*/
public class LoginUser2 {
private Integer id;
private String userName; /**
* 静态代码块 作用:初始化对象
* 1.只执行一次,不论创建多少个对象
*/
static {
System.out.println("------我是静态代码块-----");
} /**
* 构造代码块
* 1.每次创建对象都执行一次
* 2.可以有多个构造代码块,但是生产上一般只有一个
*/
{
System.out.println("-------我是构造代码块1------");
} /**
* 构造方法
*/
public LoginUser2() {
System.out.println("-------我是构造方法-----");
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
}

代码

  测试代码

 package com.day01.station.testDao;

 import com.day01.station.model.LoginUser2;
import org.junit.Test; /**
* Created by lidongping on 2018/5/2.
*/
public class TestLoginUser2 {
//测试构造代码块
@Test
public void test(){
LoginUser2 loginUser2 = new LoginUser2();
System.out.println("loginUser2="+loginUser2); LoginUser2 loginUser3 = new LoginUser2();
System.out.println("loginUser2="+loginUser3);
}
}

测试

23.接口简单使用

     

接口

 package com.day01.station.dao;

 import com.day01.station.model.Product;

 public interface IProductDao {
//增
public void save(String productName, int salePrice);
//删
public void delete(int id);
//改
public void update(int id,int salePrice,int costPrice);
//查
public Product query(int id);
}

接口

  实现

 package com.day01.station.dao.impl;

 import com.day01.station.dao.IProductDao;
import com.day01.station.model.Product; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class ProductDao implements IProductDao {
@Override
public void save(String productName, int salePrice) {
System.out.println("--------我是增加方法---------");
System.out.println(" productName = " + productName + " , salePrice =" + salePrice);
try {
//1. 加载
Class.forName("com.mysql.jdbc.Driver");
// * 2. 连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_web", "root", "admin");
// PreparedStatement prepareStatement(String sql)
// 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
String sql = "INSERT INTO product (product_name,sale_price) VALUES (?,?)";
//3.创建 预编译语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// void setString(int parameterIndex, String x)将指定参数设置为给定 Java String 值。
preparedStatement.setString(1, productName);
preparedStatement.setInt(2, salePrice);
//添加参数
//preparedStatement.set
//4.执行
preparedStatement.executeUpdate();//重要提醒 不需要传入sql语句
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public void delete(int id) {
System.out.println(" --------我是删除方法--------- ");
System.out.println("---id=" + id); try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建 预 编译语句
String sql = "DELETE FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设定参数
preparedStatement.setInt(1, id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public void update(int id, int salePrice, int costPrice) {
System.out.println("--------我是修改方法---------");
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql = "UPDATE product SET sale_price=?,cost_price=? WHERE id= ? ";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, salePrice);
preparedStatement.setInt(2, costPrice);
preparedStatement.setInt(3, id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public Product query(int id) {
System.out.println("------我是查询方法----------");
Product product = new Product();//袋子
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql = "SELECT id,product_name,sale_price FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, id);
//4.执行语句
ResultSet resultSet = preparedStatement.executeQuery();
//解析结果
while (resultSet.next()) {//如果有在执行里面
int id1 = resultSet.getInt("id");
String productName = resultSet.getString("product_name");
int salePrice = resultSet.getInt("sale_price");
//封装 袋子
//装
product.setId(id1);
product.setProductName(productName);
product.setSalePrice(salePrice);
}
//5.释放资源
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
return product;
}
}

实现

  测试

 package com.day01.station.testDao;

 import com.day01.station.dao.impl.ProductDao;
import org.junit.Test; /**
* Created by lidongping on 2018/5/2.
*/
public class TestDao {
@Test
public void test(){
//1.创建dao对象
ProductDao productDao = new ProductDao();
//2.调用dao的方法
productDao.save("苹果10",8000); }
}

实现

24.业务层实现

  

  业务层接口代码

 package com.day01.station.service;

 /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/ import com.day01.station.model.Product; /**
* 业务层接口命名规则: I+模型名称+Service 例如:IProductService
*/
public interface IProductService {
//增
public void save(Product product);
//删 根据id删除
public void delete(Integer id);
//改
public void update(Product product);
//查 根据id查询产品
public Product query(Integer id);
}

  业务层实现代码

 package com.day01.station.service.impl;

 import com.day01.station.dao.impl.ProductDao;
import com.day01.station.model.Product;
import com.day01.station.service.IProductService; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public class ProductService implements IProductService{
ProductDao productDao = new ProductDao(); @Override
public void save(Product product) {
//1.创建dao对象 //调用持久层保存方法
String productName = product.getProductName();
Integer salePrice = product.getSalePrice();
productDao.save(productName,salePrice); } @Override
public void delete(Integer id) {
productDao.delete(id);
} @Override
public void update(Product product) {
productDao.update(product.getId(),product.getSalePrice(),product.getCostPrice());
} @Override
public Product query(Integer id) {
Product prduct = productDao.query(id); return prduct;
}
}

03_java基础(八)之static关键字与代码块的更多相关文章

  1. 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式

    0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...

  2. java static关键字和代码块

    static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...

  3. static关键字和代码块

    static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...

  4. Java 基础 面向对象之关键字内部类代码块修饰符

    final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...

  5. JAVA核心技术I---JAVA基础知识(static关键字)

    一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...

  6. java基础学习总结——static关键字

    一.static关键字

  7. [java基础]java中static关键字

    1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ...

  8. 黑马程序员——JAVA基础之主函数main和静态static,静态代码块

    ------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...

  9. 构造方法、封装、关键字(this、static)和代码块的介绍

    1.构造方法 1.1 构造方法与成员方法的区别 构造方法分为无参构造和有参构造,其中有参构造方法和无参构造方法为方法的重载关系. 构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同 ...

随机推荐

  1. mysql 动态拼接表字段,值 mybatis 动态获取表字段

    -- 取表所有字段,自动用逗号分开 select GROUP_CONCAT(DISTINCT COLUMN_NAME) from information_schema.columns where ta ...

  2. maven包下载失败

    使用文件搜索工具(楼主用的是 Everything) 输入.lastupdate删除所有以.lastupdate结尾的文件.然后简单修改.pom(比如加空格) 保存,然后eclipse就会重新下载ja ...

  3. centos7.5下安装teamview

    centos7.5下安装teamview, 1 安装 wget https://download.teamviewer.com/download/linux/teamviewer-host.x86_6 ...

  4. HTML5 图片宽高自适应,居中裁剪不失真

    一,使用 JS,先上效果图,右图为定死宽高的效果,左图为处理之后的 1, 主要思路是,在图片 onload 后,将图片的宽高比和 div 容器的宽高比进行比较, 2, 从而确定拉伸或者压缩之后是宽还是 ...

  5. Lua脚本语法说明(转)

    Lua脚本语法说明(增加lua5.1部份特性) Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了.估计看完了,就懂得 ...

  6. django for 循环中,获取序号

    模板的for循环中,如何获取序号? 想过用enumerate,但是在模板中会报错 Could not parse the remainder xxx: 后来搜到 forloop.counter,完美解 ...

  7. jquery 属性-记住

    $("").attr(); $("").removeAttr(); $("").prop(); $("").remove ...

  8. 创建模式--原型模式(JAVA)

    原型模式: 原型模式主要针对模型对象类型的克隆,对已有构造好的对象进行复制获取一个新的对象实例.比如我们在获取一个对象并成功赋值后,要传递给多个处理类去处理. 打个比方:吃面是个处理类,面是个模型对象 ...

  9. 集合,ArrayList

    用集合代替数组: Console.Write("请输入人数:"); int renshu = int.Parse(Console.ReadLine()); ArrayList ch ...

  10. Haskell语言学习笔记(75)Conduit

    安装 conduit $ cabal install conduit Installed conduit-1.3.0.3 Prelude> import Conduit Prelude Cond ...